пользовательский вид списка в Android - PullRequest
1 голос
/ 09 ноября 2011

Я создаю индивидуальный список с множественным выбором с помощью флажка.Наконец мне удалось установить флажок, установленный в событии выбора элемента списка.

, но когда я отмечаю, флажки не выбираются в соответствии с выбором списка. Когда я нажимаю на первую строку, флажок 4-й строки включается автоматически.В короткой последовательности не поддерживается.Код с которым я работаю как ниже

  ListAdapter  adapter = new SimpleAdapter(
                    this,
                    Datalist ,
                    R.layout.customlist,
                    new String[] {"fileName","contentLength","keyPath"},
                    new int[] {R.id.title,R.id.size, R.id.path}
);
          setListAdapter(adapter);

protected void onListItemClick(ListView l, View v, int position, long id) {
            super.onListItemClick(l, v, position, id);
             ViewGroup group=(ViewGroup)v;
         CheckBox check=(CheckBox)group.findViewById(R.id.sharecheckbox); 
         check.toggle();
}

Ответы [ 2 ]

1 голос
/ 19 октября 2012
    ListView mainListView; 
    mainListView = (ListView) findViewById( R.id.mainListView );  

    // Create and populate a List of planet names.  
    String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars",  
                                      "Jupiter", "Saturn", "Uranus", "Neptune"};    
    ArrayList<String> planetList = new ArrayList<String>();  
    planetList.addAll( Arrays.asList(planets) );  

    // Create ArrayAdapter using the planet list.  
    listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, planetList);  

    // Add more planets. If you passed a String[] instead of a List<String>   
    // into the ArrayAdapter constructor, you must not add more items.   
    // Otherwise an exception will occur.  
    listAdapter.add( "Ceres" );  
    listAdapter.add( "Pluto" );  
    listAdapter.add( "Haumea" );  
    listAdapter.add( "Makemake" );  
    listAdapter.add( "Eris" );  

    // Set the ArrayAdapter as the ListView's adapter.  
    mainListView.setAdapter( listAdapter );        
  }  
}  
1 голос
/ 09 ноября 2011

ListView использует для поддержки повторного использования элементов списка, в соответствии с этим довольно подробным объяснением от ввода-вывода Google.

Таким образом, check не останется прежним для этого конкретного элементав списке (т. е. он может стать неконтролируемым, если ListView перерисовывает его, или какой-то другой элемент может стать проверенным).

Я бы предложил сохранить собственный проверенный массив состояний (установите для него значения в onListItemClick ()):

  • Поддерживать собственный isChecked в Datalist и использовать собственный SimpleAdapter.ViewBinder для установки правильных состояний флажков каждый раз, когда setViewValue() вызывается;
  • Расширяет ArrayAdapter и проверяет привязку состояний в getView();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...