2

Я пытался с двух дней решить эту проблему. Я видел много вопросов, связанных с этой проблемой. Но они не работали для меня.
У меня есть обычай ListView. В каждый ряд входит один ImageView, два TextView и один ToggleButton. Все эти грузы прекрасны. Когда я меняю состояние ToggleButton на true, тогда, когда я прокручиваю вниз и снова прокручиваю вверх, тогда ToggleButton потеряет состояние. Это снова идет false.Android - ToggleButton потеряет состояние после прокрутки ListView

Вот мои ArrayAdapter

private class MyAdapter extends ArrayAdapter<String> { 

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

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View row = inflater.inflate(R.layout.friends_list_item_layout, parent, false); 

     RoundedImageView friendThumb = (RoundedImageView) row.findViewById(R.id.friendDp); 
     TextView friendName = (TextView) row.findViewById(R.id.friendName); 
     TextView friendNumber = (TextView) row.findViewById(R.id.friendNumber); 
     ToggleButton shareToggle = (ToggleButton) row.findViewById(R.id.shareLocatioToggle); 

     friendName.setText(myItems[position]); 
     friendNumber.setText("8888888888"); 
     //friendThumb.setImageResource(R.drawable.friend_dp_thumb); 

     shareToggle.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
       // TODO Auto-generated method stub 
       if (arg1) { 
        Toast.makeText(getApplicationContext(), "Shared with "+myItems[position], Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 

     shareToggle.setOnLongClickListener(new OnLongClickListener() { 

      @Override 
      public boolean onLongClick(View arg0) { 
       // TODO Auto-generated method stub 
       Toast.makeText(getApplicationContext(), "Share your location", Toast.LENGTH_SHORT).show(); 
       return false; 
      } 
     }); 

     return row; 
    } 



} 

Благодаря

+0

вы должны явно установить тумблер состояние на вашем 'GetView()', на основе текущего элемента, так же, как вы установите текст для 'TextView' – hidro

+0

, но как это сделать в коде? Я смущен –

+0

Возможный дубликат [Проблема с выбором панели выбора хоста] (http://stackoverflow.com/questions/26886799/issue-with-viewholder-selection) – Sufian

ответ

2

Вам нужно 2 вещи, массив, чтобы помнить, какие предметы были переключены, и явно setChecked() те, которые были переключены.

private boolean[] myChecks = new boolean[myItems.length]; 
private class MyAdapter extends ArrayAdapter<String> { 
    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     ... 
     shareToggle.setChecked(myChecks[position]); 
     shareToggle.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
       ... 
       myChecks[position] = arg1; 
      } 
     }); 
} 
+0

Идеальное решение. Большое спасибо :) –

0

Вы должны поддерживать флаг для переключения с помощью сеттер геттер, bydefault это оттеняется, то вы должны включить/выключить тумблер и вызова notifydatasetchanged() для поддержания его состояния.

+0

Как использовать этот метод в коде? –

+0

Проверьте эту ссылку http://wptrafficanalyzer.in/blog/enabling-multi-selection-mode-in-listview-by-adding-togglebutton-using-custom-layout-in-android/ –

0

Состояние Toggle воссоздает, если оно не видно из вида просмотра списка. Можно прокручивать всю активность. Так что кнопка переключения не потеряла его состояние

Смежные вопросы