2011-11-10 59 views
0

我使用的android記事本教程代碼開始。在我的notes_row.xml中,我有一個textview來顯示筆記的標題以及最初由android隱藏的複選框:visibility =「gone」在Android中遍歷一個listView,使每個項目前的複選框可見

我希望當用戶打開選項菜單並單擊Mark時,列表中每個項目前面的複選框應該可見。但是,當我點擊模擬器中的標記時,只有第一個音符的複選框變爲可見。所以,我想遍歷整個列表,並設置可見性(0),以便所有複選框都可見。我是初學者,所以請詳細回答。提前致謝。

我的代碼片段:

public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    switch(item.getItemId()) { 
    case INSERT_ID: 
     createNote(); 
     return true; 
    case MARK_ID: 
       // only first item check box appears with following 2 lines: 
        CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox1); 
        checkBox.setVisibility(0); 

       /* tried the following, but no chekbox appears with this: 
     Cursor c = mDbHelper.fetchAllNotes(); 
     c.moveToPosition(0); 
     while(c.isAfterLast()){ 
      CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox1); 
      checkBox.setVisibility(0); 
      c.moveToNext(); 
     } 
       */ 
     return true; 
} 

我的新代碼閱讀的答案後,仍只出現在第一項的複選框:

public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    switch(item.getItemId()) { 
    case INSERT_ID: 
     createNote(); 
     return true; 
    case MARK_ID: 
     CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox1); 
     String[] lvItems = new String[]{NotesDbAdapter.KEY_TITLE}; 
     MyAdapter arrAdapter = new MyAdapter(this, android.R.layout.simple_list_item_multiple_choice, lvItems); 
     arrAdapter.toggleCheckBoxVisibility(checkBox); 
     arrAdapter.notifyDataSetChanged(); 
        return true; 
    return super.onMenuItemSelected(featureId, item); 
      } 

這裏是我的適配器:

private class MyAdapter extends ArrayAdapter<String>{ 

    public MyAdapter(Context context, int textViewResourceId, 
      String[] objects) { 
     super(context, textViewResourceId, objects); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View row = inflater.inflate(R.layout.notes_row, parent, false); 
     //String[] from = new String[]{NotesDbAdapter.KEY_TITLE}; 
     return row; 
     //return super.getView(position, convertView, parent); 
    } 

    public boolean toggleCheckBoxVisibility(CheckBox checkBox){ 
     checkBox.setVisibility(0); 
     super.notifyDataSetChanged(); 
     return true; 
    } 

} 
+0

該適配器您正在起訴在列表顯示各個項目 – Maneesh

+0

我使用: 光標notesCursor = mDbHelper.fetchAllNotes(); \t \t startManagingCursor(notesCursor); \t \t //創建一個陣列指定我們希望在列表中顯示(僅TITLE) \t \t字符串[]從=新的String [] {NotesDbAdapter的字段。KEY_TITLE}; \t \t //,我們希望給這些字段(在這種情況下只是文本1)結合 \t \t INT []到新= INT [] {R.id.textView1}字段的陣列; \t \t //現在創建一個簡單的光標適配器,並將其設置到顯示 \t \t SimpleCursorAdapter筆記= \t \t \t \t新SimpleCursorAdapter(此,R.layout.notes_row,notesCursor,從,到); \t \t setListAdapter(附註); } –

回答

0
  1. 把你的名單適配器
  2. 迭代通過列表項視圖中使用getView(或類似)
  3. 對於每個查看您取做v.setVisibility(View.VISIBLE)

這大致是怎樣的你必須做與

編輯您的列表中的每個視圖交互:更具體: 您的活動中的主線程

MyAdapter a= (MyAdapter) this.getArrayAdapter(); 
//count how many views you have to iterate and build a for loop accordingly 
for(...){ 
    View v = a.getView(/*based on the for index position */).setVisibility(View.VISIBLE) 
//Do something else with the view if you want... 

此解決方案假設您已經創建並與您的活動關聯了陣列適配器。

+0

請詳細說明第2步!這就是我的問題! 謝謝。 –

+0

您的活動主線程內部,例如: MyAdapter一個=(MyAdapter)this.getArrayAdapter(); //算你有多少意見,迭代,並建立一個for循環相應 視圖V = a.getView(/ *基於該索引位置* /)。setVisibility(View.VISIBLE) //完成如果你想... –

0

在您的適配器中創建一個方法來爲可見性設置布爾標誌。點擊按鈕後,調用該方法並將該標誌設置爲true。然後使用notifyDataSetChanged()更新您的列表。 在您的getView方法中,您可以將複選框的可見性設置爲布爾標誌中的值。

+0

我這樣做了,但仍然只有第一個項目的複選框出現。請參閱問題中的編輯。如果需要,我可以通過電子郵件發送完整的項目。謝謝。 –

+0

你誤會我的做法 - 在適配器的方法應該是: 公共無效toggleCheckBoxVisibility(布爾知名度){ checkboxVisibility =知名度; notifyDataSetChanged(); } 在你getView你再使用: 複選框複選框=(複選框)row.findViewById(R.id.checkBox1); checkBox.setVisibility(?checkboxVisibility View.VISIBLE:View.GONE); –

0

試試這個: 在你的類寫這樣的代碼:

@Override 
protected void onStart() { 
    super.onStart(); 

    ArrayAdapter<String> araAdapter=new ArrayAdapter<String>(getApplicationContext(),    

    android.R.layout.simple_list_item_multiple_choice, xmlList); 
    listView_xml.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
    listView_xml.setAdapter(araAdapter); 
} 

的XMLList是什麼數據保存烏爾或您的String []數組。 listview_xml是你的listview的名字。 Go through this tutorial implementing multiple check boxes