2011-05-12 48 views
1

我想創建一個列表視圖,在點擊一個項目時背景會改變顏色。到目前爲止,我的當前實現導致「背對背」可見單元格的背景發生了變化。例如,如果我選擇列表中的頂部項目,則底部項目會突出顯示。任何人都可以幫助我實現所需的功能?有誰知道如何突出顯示Android ListView中的選定項目?

我的目錄活動:

 public void onCreate(Bundle savedInstanceState) { 

    Log.e(TAG, "Starting Symptom Activity..."); 
    super.onCreate(savedInstanceState); 


    setContentView(R.layout.symptom_listview); 
    // Setup list 
    this.setupSymptomScreen(); 
    startManagingCursor(cs); 
    //get handle on buttons 
    Button nextButton = (Button) findViewById(R.id.symptom_next); 
    Button backButton = (Button) findViewById(R.id.symptom_goBack); 
    ListView lv =getListView(); 

    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
    lv.setItemsCanFocus(false); 

    SymptomAdapter adapter = new SymptomAdapter(this, 
      R.layout.symptom_item, cs, new String[] { DbAdapter.KEY_SYMPTOM }, 
      new int[] { R.id.txt_symptom }); 

    selectedItems = new HashSet<String>(); 
    adapter.setLookupTable(selectedItems); 
    setListAdapter(adapter); 



    lv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 
     if(!selectedItems.contains(view.toString())) 
     { 
      view.setBackgroundColor(Color.CYAN); 
      String symptom = ((TextView) view.findViewById(R.id.txt_symptom)).getText().toString(); 
      selectedItems.add(symptom); 

     } 
     else 
     { 
      view.setBackgroundColor(Color.WHITE); 
      selectedItems.remove(view.toString()); 
     } 


        } 
     }); 
      nextButton.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      // import selected items into a list 
      importSelected(); 
      // figure out category 
      process(); 
     } 
    }); 
    //List for symptom ids 
    symptoms_id = new ArrayList<Integer>(cs.getCount()); 

} 

而且我也有我的自己的適配器中,我已重寫getView

public View getView(int position, View convertView, ViewGroup parent) { 

     if(convertView != null){ 
      String symptoms = ((TextView) convertView.findViewById(R.id.txt_symptom)).getText().toString(); 
      if(!selectedItems.contains(symptoms)) 
       convertView.setBackgroundColor(Color.WHITE); 
      } 

      return super.getView(position, convertView, parent); 
    } 

回答

5

下面是一個例子:

private class ItemAdapter extends SimpleAdapter { 

    private int mItemIndex = -1; 

    public ItemAdapter(Context context, 
     List<? extends Map<String, ?>> data, int resource, 
     String[] from, int[] to) { 
     super(context, data, resource, from, to); 
     // TODO Auto-generated constructor stub 
    } 

    /* (non-Javadoc) 
    * @see android.widget.SimpleAdapter#getView(int, android.view.View, android.view.ViewGroup) 
    */ 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     View view = super.getView(position, convertView, parent); 
     if (position == mItemIndex) { 
      convertView.setSelected(true); 
      convertView.setPressed(true); 
      convertView.setBackgroundColor(Color.parseColor("#FF9912")); 
     } 

     return view; 
    } 

    public void setSelectItem(int index) { 
     mItemIndex = index; 
    } 

    public int getSelectItem() { 
     return mItemIndex; 
    } 

} 

當你選擇一個項目,onItemClick功能如下:

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
    ((ItemAdapter)list.getAdapter()).setSelectItem(arg2); 
} 
+0

需要在「if(position == mItemIndex)」之後有一個else-block來重置你的顏色。 SimpleAdapter可以在別處再次使用相同的視圖(convertView) – tofi9

相關問題