2012-12-11 20 views
5

Bir Multiselected (checked) listview istiyorum. Bir maddeyi seçtiğimde yeşil onay işareti görünmelidir. Bunun için CheckedTextViews kullanıyorum. ListView, verileri veritabanından alır. Bunun için SimpleCursorAdapter kullanıyorum. Düğmeye tıkladığınızda, seçilen girişler (ID'ler) bir sonraki etkinliğe geçirilecektir.CheckedTextView kontrol edilmedi

Sorunum, CheckedTextView onay işaretlerinin görüntülenmemesidir. Ancak kimlikler bir sonraki etkinliğe geçirilecek. Neyi yanlış yapıyorum? Nasıl düzeltilir?

selecttest.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

     <Spinner 
     android:id="@+id/spinner_select_language" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 

     <Button 
      style="@style/btn_Font" 
      android:id="@+id/selecttest_start" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/spinner_test" 
      android:onClick="onClick" 
      android:text="@string/selecttest_start" /> 

     <ListView 
      android:id="@+id/lv_lesson" 
      android:layout_width="match_parent" 
      android:layout_height="200dp" 
      android:fadeScrollbars="false" 
      android:choiceMode="multipleChoice" 
      android:layout_alignParentLeft="true" 
      android:cacheColorHint="#00000000" 
      android:layout_below="@+id/selecttest_start" > 
     </ListView> 

</RelativeLayout> 

dataset_ctv_lesson.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <CheckedTextView 
     style="@style/tv_Font" 
     android:id="@+id/ctv_lesson" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:text="@string/none" 
     android:checkMark="@drawable/ctv_state_checker" 
     /> 

</RelativeLayout> 

ctv_state_checker.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_checked="false" 
      android:drawable="@drawable/btn_check_buttonless_off" /> 
    <item android:state_checked="true" 
      android:drawable="@drawable/btn_check_buttonless_on" /> 

</selector> 

SelectTestActivity.java

public class SelectTestActivity 
extends Activity 
implements OnItemSelectedListener 
{ 
    Database db; 
    SimpleCursorAdapter adaptercursor, lv_adaptercursor; 
    ListView lv_lesson; 

    // Arraylist for checked item in the lesson view 
    ArrayList<String> checkedlessons = new ArrayList<String>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.selecttest); 

     // Create Database 
     db = new Database(this); 

     // Drop-Down-Menu to select a language 
     Spinner spinner_language = (Spinner) findViewById(R.id.spinner_select_language); 
     spinner_language.setOnItemSelectedListener(this); 

     Cursor cursor = db.createListViewCursor(); 

     String[] displaycolumn = new String[]{"language"}; 
     int[] displayview = new int[] {R.id.tv_language}; 

     adaptercursor = new SimpleCursorAdapter(this, R.layout.datasetlanguage, cursor, displaycolumn, displayview, 0); 
     spinner_language.setAdapter(adaptercursor); 

     // ListView to select a lesson 
     lv_lesson = (ListView) findViewById(R.id.lv_lesson); 

     cursor = db.createListViewLessonCursor(getSelectedItemIDFromSpinnerLanguage()); 

     displaycolumn = new String[]{"lesson"}; 
     int[] displayview2 = new int[] {R.id.ctv_lesson}; 

     lv_adaptercursor = new SimpleCursorAdapter(this, R.layout.dataset_ctv_lesson, cursor, displaycolumn, displayview2, 0); 
     lv_lesson.setAdapter(lv_adaptercursor); 

     lv_lesson.setOnItemClickListener(new ListView.OnItemClickListener() 
     { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
      { 
       if (!checkedlessons.contains(Long.toString(id))) 
       { 
        checkedlessons.add(Long.toString(id)); 

        // checked textview 
        lv_lesson.setItemChecked(position, true); 
       } 
       else 
       { 
        checkedlessons.remove(Long.toString(id)); 

        // unchecked textview 
        lv_lesson.setItemChecked(position, false);  
       } 
      } 
     }); 

     // Close the database 
     db.close(); 
    } 

cevap

3
  1. CheckedTextView'unuzun stilini kaldırmaya çalışın, stilinizdeki bazı değerlerin görünümü etkilediğini düşünüyorum.
  2. RegularLepout öğesini dataset_ctv_lesson.xml dosyasında kaldırın ve tıklanan öğede onay durumunu değiştirmeniz gerekmez. ListView, kontrol durumunu tek başına muhafaza edebilir. Çoklu seçim modunu etkinleştirmek için ListView.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE) öğesini kullanın ve işaretli satır konumlarını almak için ListView.getCheckedItemPositions() öğesini kullanın.
+1

RelativeLayout'u kaldırdım ve şimdi çalışıyor. Çok teşekkürler. – kaschey

+0

@ user1891764 Sebebini anlıyor musunuz? – faylon

+0

SimpleCursorAdapter, bir düzen dosyası ve imlecin sütunlarını görüntülemesi gereken görünümler gerektirir. Düzen dosyası yalnızca bu görünümleri içermelidir. Bu doğru mu? – kaschey