Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

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

Множественный выбор в listview - Android

23.11.2012, 14:36. Просмотров 1412. Ответов 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"); не выводится
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2012, 14:36     Множественный выбор в listview
Посмотрите здесь:

Android Listview
Android ListView
Переход из Listview в Listview Android
ListView не работает выбор элемента Android
ListView Android
Android id ListView
Android из БД в ListView
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
23.11.2012, 14:39     Множественный выбор в listview #2
Как по ине целесообрахно создать свой адаптер для списка

Adding CheckBoxes to a Custom ListView in Android
fireridlle
75 / 75 / 1
Регистрация: 02.02.2012
Сообщений: 462
23.11.2012, 14:45  [ТС]     Множественный выбор в listview #3
ну так я просто создание списка выделил в отдельный клас что бы onCreate не терял читабельность большим кодом
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
23.11.2012, 14:50     Множественный выбор в listview #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;
  }
 
 }
вообще в отдельный файл, и используйте этот класс для построение и других таких списках в вашей программе!
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.11.2012, 22:25     Множественный выбор в listview #5
чтобы getCheckedItemPositions() вам что-то возвращал, айтемы листа предполагаю должны реализовывать интерфейс Checkable
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
24.11.2012, 14:47     Множественный выбор в listview #6
постойте, не горячитесь
http://stuff.mit.edu:8001/afs/sipb/p...ew/List16.html
вот вам пример с соблюдением всех канонов. (List16 из ApiDemos) так же можете посмотреть List15 List17. не помешает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2012, 21:15     Множественный выбор в listview
Еще ссылки по теме:

Android ListView множественный выбор несмотря на SingleChoice mode
Множественный выбор в списке Android
Android ListView
Android Listview в listview
Android Выбор SIM карты, с которой необходимо произвести выбор

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

Или воспользуйтесь поиском по форуму:
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.11.2012, 21:15     Множественный выбор в listview #7
ах да, это тоже не забудьте
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
Yandex
Объявления
24.11.2012, 21:15     Множественный выбор в listview
Ответ Создать тему
Опции темы

Текущее время: 02:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru