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

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

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

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

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

ListView множественный выбор несмотря на SingleChoice mode - Программирование Android
Здравствуйте! Столкнулся с проблемой: использую listview со своим Adapter-ом, наследуем от BaseAdapter-а, с переопределенными методами...

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

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

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

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

Данные из SQlite в ListView, обработка события ListView - Программирование Android
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД. mList.setOnItemClickListener(new...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
23.11.2012, 14:39 #2
Как по ине целесообрахно создать свой адаптер для списка

Adding CheckBoxes to a Custom ListView in Android
1
fireridlle
75 / 75 / 1
Регистрация: 02.02.2012
Сообщений: 462
23.11.2012, 14:45  [ТС] #3
ну так я просто создание списка выделил в отдельный клас что бы onCreate не терял читабельность большим кодом
0
Infinity3000
1058 / 577 / 24
Регистрация: 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
1158 / 982 / 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
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.11.2012, 21:15 #7
ах да, это тоже не забудьте
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2012, 21:15
Привет! Вот еще темы с ответами:

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

Копирование данных из 1 listView во 2 listView - Программирование Android
Нужно что бы при нажатии на один элемент в первом ListView он копировался во второй ListView причём многократно.Но я использую...

Переход из Listview в Listview - Программирование Android
Как сделать, что бы когда нажимаешь в главном листвью на кнопку, открывалось новое нужное(т.е. то по которому тапнули) активити с другим...

Использование ListView в ListView - Программирование Android
Всем привет. Можете показать как использовать ListView в ListView, с заполнением как внешнего ListView, так и внутреннего причем с...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.11.2012, 21:15
Ответ Создать тему
Опции темы

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