Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
fireridlle
75 / 75 / 13
Регистрация: 02.02.2012
Сообщений: 462
#1

Множественный выбор в listview - Программирование Android

23.11.2012, 14:36. Просмотров 1630. Ответов 6
Метки нет (Все метки)

вот так создается список
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class AdapterHelper{
    String[] name = {"Первый","Второй","Третий"};
    int[] img = {R.drawable.a,R.drawable.b,R.drawable.c};
    String[] from = {"name", "img", "lin"};
    int[] to = {R.id.textView1, R.id.imageView1, R.id.FrameLayout2};
    Context cont;
    
    
    ArrayList<Map<String, Object>> data = new ArrayList<Map<String,Object>>();
    Map<String, Object> m;
    
    AdapterHelper(Context cont){
        this.cont = cont;
    }
    
    SimpleAdapter adapter(){
        int[]col = {Color.BLUE, Color.RED};
        for(int i = 0; i < name.length; i++){
            m = new HashMap<String, Object>();
            m.put("name", name[i]);
            m.put("img", img[i]);
            m.put("lin", col[i % 2]);
 
            data.add(m);
        }
        
        SimpleAdapter adapter = new SimpleAdapter(cont, data, R.layout.list, from, to);
        adapter.setViewBinder(new MyBuild());
        return adapter;
    }
    
    
}
содержимое лейаута из которого создается список
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/FrameLayout1"
    android:layout_width="match_parent"
    android:layout_height="50dp" >
 
    <FrameLayout
        android:id="@+id/FrameLayout2"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
 
 
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:text="TextView" />
        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_action_search" />
 
 
        <CheckBox
            android:id="@+id/checkBox1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="CheckBox" />
 
    </FrameLayout>
 
</FrameLayout>
в общем по нажатию на кнопку я хочу получить позиции выделеных, но ничего нет

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    adHelp = new AdapterHelper(this);
    SimpleAdapter adapter = adHelp.adapter();
    final ListView list = (ListView) findViewById(R.id.listView1);
    list.setAdapter(adapter);
    list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    Button btn = (Button) findViewById(R.id.button1);
    btn.setOnClickListener(new OnClickListener() {
        
        public void onClick(View v) {
            SparseBooleanArray bb = list.getCheckedItemPositions();
            Log.d("MyLog", "click");
            for(int i = 0; i < bb.size(); i++){
                Log.d("MyLog", "ok");
                int key = bb.keyAt(i);
                if(bb.get(key)){
                    Log.d("MyLog", name[key]);
                }
            }
        }
    });
в лог выводится "click" и все. даже то что в цикле Log.d("MyLog", "ok"); не выводится
http://www.cyberforum.ru/android-dev/thread1234302.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2012, 14:36
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Множественный выбор в listview (Программирование Android):

Множественный выбор в списке
Создал список в активити и в отдельном XML файле написал как будет выглядеть...

Множественный выбор в Android-приложениях
В общем необходимо сделать Listview с множественным выбором. При этом каждый...

ListView не работает выбор элемента
Доброго времени суток. Который день мучаюсь. Не знаю как поменять цвет...

ListView. После добавления кнопки перестал быть доступен сам ListView
Кастомизировал ListView с помощью нескольких TextView. Но после того, как...

Listview вывод данных и переход по нажатию на другой Listview SQLite
Доброго извините за название темы, долго не мог сформировать название, В общем...

6
Infinity3000
1060 / 579 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
23.11.2012, 14:39 #2
Как по ине целесообрахно создать свой адаптер для списка

Adding CheckBoxes to a Custom ListView in Android
1
fireridlle
75 / 75 / 13
Регистрация: 02.02.2012
Сообщений: 462
23.11.2012, 14:45  [ТС] #3
ну так я просто создание списка выделил в отдельный клас что бы onCreate не терял читабельность большим кодом
0
Infinity3000
1060 / 579 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
23.11.2012, 14:50 #4
Цитата Сообщение от fireridlle Посмотреть сообщение
ну так я просто создание списка выделил в отдельный клас что бы onCreate не терял читабельность большим кодом
CustomAdapter в примере находится не в onCreate.

В OnCreate только две строчки

Java
1
2
3
4
final CustomAdapter adapter=new CustomAdapter(this, R.layout.players_layout,players); 
  
 //finally,set the adapter to the default ListView
 setListAdapter(adapter);

Цитата Сообщение от fireridlle Посмотреть сообщение
не терял читабельность большим кодом
Вынесите клас

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 //define your custom adapter
private class CustomAdapter extends ArrayAdapter<HashMap<String, Object>>
{
   // boolean array for storing
   //the state of each CheckBox 
   boolean[] checkBoxState;
   
  
   ViewHolder viewHolder;
   
   public CustomAdapter(Context context, int textViewResourceId,
   ArrayList<HashMap<String, Object>> players) {
 
    //let android do the initializing :)
    super(context, textViewResourceId, players); 
    
  //create the boolean array with
   //initial state as false
  checkBoxState=new boolean[players.size()];
  }
 
 
    //class for caching the views in a row  
 private class ViewHolder
 {
   ImageView photo;
   TextView name,team;
   CheckBox checkBox;
 }
 
   
 
 @Override
 public View getView(final int position, View convertView, ViewGroup parent) {
 
   if(convertView==null)
    {
   convertView=inflater.inflate(R.layout.players_layout, null);
   viewHolder=new ViewHolder();
 
    //cache the views
    viewHolder.photo=(ImageView) convertView.findViewById(R.id.photo);
    viewHolder.name=(TextView) convertView.findViewById(R.id.name);
    viewHolder.team=(TextView) convertView.findViewById(R.id.team);
    viewHolder.checkBox=(CheckBox) convertView.findViewById(R.id.checkBox);
 
     //link the cached views to the convertview
    convertView.setTag( viewHolder);
    
 
  }
  else
   viewHolder=(ViewHolder) convertView.getTag();
 
            
  int photoId=(Integer) players.get(position).get("photo");
 
  //set the data to be displayed
  viewHolder.photo.setImageDrawable(getResources().getDrawable(photoId));
  viewHolder.name.setText(players.get(position).get("name").toString());
  viewHolder.team.setText(players.get(position).get("team").toString());
    
   //VITAL PART!!! Set the state of the 
   //CheckBox using the boolean array
        viewHolder.checkBox.setChecked(checkBoxState[position]);
             
          
           //for managing the state of the boolean
           //array according to the state of the
           //CheckBox
           
           viewHolder.checkBox.setOnClickListener(new View.OnClickListener() {
     
   public void onClick(View v) {
    if(((CheckBox)v).isChecked())
     checkBoxState[position]=true;
    else
     checkBoxState[position]=false;
      
    }
   });
 
   //return the view to be displayed
   return convertView;
  }
 
 }
вообще в отдельный файл, и используйте этот класс для построение и других таких списках в вашей программе!
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.11.2012, 22:25 #5
чтобы getCheckedItemPositions() вам что-то возвращал, айтемы листа предполагаю должны реализовывать интерфейс Checkable
0
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
24.11.2012, 14:47 #6
постойте, не горячитесь
http://stuff.mit.edu:8001/afs/sipb/p...ew/List16.html
вот вам пример с соблюдением всех канонов. (List16 из ApiDemos) так же можете посмотреть List15 List17. не помешает.
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.11.2012, 21:15 #7
ах да, это тоже не забудьте
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
0
24.11.2012, 21:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2012, 21:15
Привет! Вот еще темы с решениями:

Данные из SQlite в ListView, обработка события ListView
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные...

Передача данных из ListView в другой Activity в ListView
Добрый день. Пытаюсь разобраться с передачей данных с ListView, но выходит что...

ListView, ToggleButton, SQLite, CursorAdapter. Как найти idItem в ListView, где была нажата ToggleButton?
Добрый день. Затрудняюсь понять один момент: У меня есть ListView,...

Копирование данных из 1 listView во 2 listView
Нужно что бы при нажатии на один элемент в первом ListView он копировался во...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru