2012-06-18 130 views
0

我想爲我的列表視圖做一個上下文菜單,所以當用戶長按一行,上下文菜單出現,並且當用戶選擇一個選項時,行被選中。但是,選擇了很多行,它會重複在列表視圖中爲其他行選擇模式。ListView重複選擇

同樣的情況發生在我點擊一行時。 IDK,如果它是視圖回收問題,或者是什麼。

如何解決這兩個問題,因爲首先是處理內部onContextItemSelected(MenuItem item)所以我通過操縱MenuItem對象管理行,第二個是在AdapterView.OnItemClickListener處理。

順便說一句,我使用CursorAdapter來填充ListView。

謝謝。

這裏是我的代碼:

// Listener for the click on the items in the ListView 
mListViewListener = new AdapterView.OnItemClickListener() 
{ 
    // When the user clicks some item, the Activity that shows the available dates will be shown 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long arg3) 
    { 
     view.setBackgroundColor(0xff333333); 
    } 
}; 


// Handle the LongClick on the row 
@Override 
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) 
{ 
    super.onCreateContextMenu(menu, view, menuInfo); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.contact_options, menu); 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) 
{ 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    switch(item.getItemId()) 
    { 
     case R.id.context_menu_item: 
      info.targetView.setBackgroundColor(0xff333333); 

      default: 
      return super.onContextItemSelected(item); 
    } 
} 
+0

你最終的目標是什麼:長時間點擊改變背景顏色?或者更多? – Sam

+0

@Sam更改我長按的行的背景(在我從LongClick創建的上下文菜單中選擇一個選項後),並更改我簡單單擊的行的背景。 – rogcg

+0

檢查你的行重點,看看會發生什麼 – SpicyWeenie

回答

1

像這樣的事情在你的CursorAdapter應該工作:

private Set<String> mSelectedContactNumbers = new HashSet<String>(); 

@Override 
public void bindView(View view, Context context, final Cursor cursor) 
{ 
    final String contactNumber = cursor.getString(cursor.getColumnIndex("contact_number")); 
    view.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
        if (!mSelectedContactNumbers.remove(contactNumber)) { 
         mSelectedContactNumbers.add(contactNumber); 
        } 
        notifyDataSetChanged(); 
     } 
    }); 
    if (mSelectedContactNumbers.contains(contactNumber)) { 
     view.setBackgroundColor(0xff333333); 
    } else { 
     view.setBackgroundColor(0); 
    } 
    createView(view, cursor);  
} 

這僅僅是一個快速的解決方案。您可以在OnItemClickListener中調用的適配器中創建toggleSelected函數。這樣它會更好一點。