2015-09-11 2 views
-3

Я реализовал MultichoicemodeListener и создал некоторые странные проблемы ... У меня есть 12 элементов в списке ... 8 видны и 4 находятся под экраном .. так что эти 4 скрыты. я долго кликнул из 8 видимых элементов ... код также меняет фон другого из скрытых просмотров ...... функции отдыха работают. Помощь в PLUS. Я застрял за последние 2 дня.multichoicemodelistener выбор нескольких элементов для одного щелчка

MyCusrsorAdaptor customAdaptor; 
private Cursor mCursor; 
private ListView lv01; 
View view; 
int itemsSelectedCount=0; 
SelectedItems = new SparseBooleanArray(); 

lv01.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 

    lv01.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { 

     @Override 
     public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { 
      itemsSelectedCount = toggleSelection(position, checked); 
      mode.setTitle(itemsSelectedCount + " Messages Selected"); 

     } 

     @Override 
     public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
      mode.getMenuInflater().inflate(R.menu.menu_multichoice, menu); 
      return true; 
     } 

     @Override 
     public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 
      return false; 
     } 

     @Override 
     public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 

      switch (item.getItemId()) { 
       case R.id.delete_msg: { 
        DeleteSelectedRows(); 
       } 
      } 

      return false; 
     } 

     @Override 
     public void onDestroyActionMode(ActionMode mode) { 

      SelectedItems.clear(); 
      SelectedItems = new SparseBooleanArray(); 
      lv01.clearChoices(); 
      recreate(); 
     } 
    }); 








} 

private void DeleteSelectedRows() 
{ 
    for(int k =0; k< SelectedItems.size();k++) 
    { 

     Cursor curitem = (Cursor) lv01.getItemAtPosition(SelectedItems.keyAt(k)); 
     String rowID = curitem.getString(curitem.getColumnIndex(dbHelper.COL_ROWID)); 
     String whereclause = dbHelper.COL_ROWID+"=?"; 
     db.delete(dbHelper.TABLE_NAME3,whereclause,new String[]{rowID}); 
     Log.d(TAG, "Delteted ROWID is --> "+rowID); 
    } 

    UpdateAlarms(); 
    recreate(); 

} 

private int toggleSelection(int position, boolean checked) 
{ 
    RelativeLayout relativeLayout = (RelativeLayout)lv01.getChildAt(position); 

    if(checked==true) 
    { SelectedItems.put(position,checked); 

     relativeLayout.setBackground(getResources().getDrawable(R.drawable.border_multichoice)); 
    } 
    else{ 
     SelectedItems.delete(position); 

     relativeLayout.setBackground(getResources().getDrawable(R.drawable.borderedittask)); 
    } 
    return SelectedItems.size(); 
} 

Пожалуйста, найдите ниже код для Cursor Adapter

public class MyCusrsorAdaptor extends CursorAdapter 
{ 
private LayoutInflater curinf; 
private MyDBHelper dbHelper; 
private static final String TAG="OK OK OK OK OK"; 

public SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmm"); 
Date date; 


public MyCusrsorAdaptor(Context context, Cursor c, int flags) { 
    super(context, c, flags); 
    curinf = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public void bindView(View view, Context context, Cursor cursor) 
{ 
    TextView title = (TextView) view.findViewById(R.id.title); 
    String titleName = cursor.getString(cursor.getColumnIndex(dbHelper.COL_USERNAME)); 
    title.setFocusable(false); 
    title.setFocusableInTouchMode(false); 

    ImageView imv = (ImageView) view.findViewById(R.id.list_image); 
    imv.setFocusable(false); 
    imv.setFocusableInTouchMode(false); 


    TextView artist1 = (TextView) view.findViewById(R.id.artist1); 
    TextView artist2 = (TextView) view.findViewById(R.id.artist2); 

    artist1.setFocusable(false); 
    artist1.setFocusableInTouchMode(false); 

    artist2.setFocusable(false); 
    artist2.setFocusableInTouchMode(false); 

    String userid = cursor.getString(cursor.getColumnIndex(dbHelper.COL_1)); 
    String userRel = cursor.getString(cursor.getColumnIndex(dbHelper.COL_2)); 
    String dur = cursor.getString(cursor.getColumnIndex(dbHelper.COL_3)); 
    String mstyp = cursor.getString(cursor.getColumnIndex(dbHelper.COL_4)); 
    String msg = cursor.getString(cursor.getColumnIndex(dbHelper.COL_5)); 
    try { 
      date = dateFormat.parse(cursor.getString(cursor.getColumnIndex(dbHelper.COL_6))); 
    } catch (java.text.ParseException e) { 
     e.printStackTrace(); 
    } 
    artist1.setText("Lets Rock on: "+ PrintTypeDateFormatter(date)); 

    artist2.setText(msg); 

    title.setText(titleName+" ("+userid+")"); 


} 

private String PrintTypeDateFormatter(Date date) 
{ 
    SimpleDateFormat dateFormat2 = new SimpleDateFormat("EEE dd MMM yyyy hh:mm a"); 
    String toPrint = dateFormat2.format(date).toString(); 
    android.util.Log.d(TAG, toPrint); 
    return toPrint; 
} 

@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    return curinf.inflate(R.layout.custom_layout_messages_type,parent,false); 
} 
+0

@Все .. В случае, если требуется больше кода, то plz do ask ... –

+0

Значит, вы меняете фон для одного элемента, а затем обнаруживаете, что фон изменился на другие элементы после прокрутки их в представлении? Просто пытаюсь уточнить ваш вопрос. – Jon

+0

@ Джонатан: да, вы абсолютно правы. –

ответ

0

После многих Googling и пытается несколько решений макета .... я наконец нашел ответ .... Но первый позволяет понять проблему и его причина:

Причина: несколько элементов Элементы были подсвечены (выделение работает нормально/выделено и выбрано - разные вещи) из-за перерабатывания видов ListView при прокрутке списка. Выделенный элемент был повторно использован при прокрутке следующим образом visib le view также был выделен.

Решения: Просто добавьте стиль в style.xml

<style name="activated" parent="AppTheme"> 
    <item name="android:background">?android:attr/activatedBackgroundIndicator</item> 
</style> 

Теперь переходят к пользовательскому макету, который вы используете поместить это в корне и вы установлены.

style="@style/activated" 

Если вы хотите переопределить цвет выделения по умолчанию, то также можно, определив новый стиль, который включает в себя вытяжку для активации режима.

Единственное, что мне нужно было удалить, это обычная граница для этого. Остальной код остается таким же.

Thx a ton to Jonathan727 за его время и силы. Очень ценю.