2016-09-28 4 views
0

Я новичок в android, я пытаюсь показать listview с CheckedTextView на экране с несколькими проверенными элементами, но не смог, мой список всегда не отмечен мой код,Android listView с CheckedTextView, заполнить несколькими проверочными строками

final ListView listView = (ListView) findViewById(R.id.BusRoutesList); 
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.routes_list_item, R.id.stop_checkedtextbox, routesSubList); 
listView.setAdapter(arrayAdapter); 
for (int i = 0; i < routesSubList.size(); i++) { 
      if (selectedRoutesList.contains(routesSubList.get(i))) { 
       //listView.setItemChecked(i,true); No Luck 
       View v = listView.getAdapter().getView(i, null, null); 
       CheckedTextView checkedTextView = (CheckedTextView) v.findViewById(R.id.stop_checkedtextbox); 

       checkedTextView.setChecked(true);//I get correct row to be checked but not shown on screen 

      } 
     } 
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
@Override 
public void onItemClick(AdapterView<?> adapterView, View view, int position, 
            long id) { 
CheckedTextView checkedTextView = (CheckedTextView) view.findViewById(R.id.stop_checkedtextbox); 
       boolean checked = checkedTextView.isChecked(); 
       // String str = 
       if (checked) { 
        checkedTextView.setChecked(false); 
        selectedRoutesList.remove(listView.getItemAtPosition(position).toString()); 
       } else { 
        selectedRoutesList.add(listView.getItemAtPosition(position).toString()); 
        checkedTextView.setChecked(true); 
       } 
      } 
     }); 

Пожалуйста, советы, я не знаю, если я что-то

+0

Не проверять мнения в ListView - это бесполезно - они возвращают , чтобы правильно установить элемент, который нужно проверить в ListView, используйте метод [ListView.setItemChecked] (https://developer.android.com/reference/android/widget/AbsListView.html) – nekavally

+0

попробовал с setItemChecked также Нет Luck for (int i = 0; i vicky

ответ

0

Вы дали ListView пользовательский макет отсутствует, так что не знаю, как это следует рассматривать, когда элемент проверяется , Вы можете попробовать переопределить getView().

 ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.routes_list_item, R.id.stop_checkedtextbox, routesSubList){ 
     @NonNull 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      if(convertView == null){ 
       convertView = getActivity().getLayoutInflater().inflate(R.layout.routes_list_item); 
      } 
      CheckedTextView checkedTextView = (CheckedTextView) convertView.findViewById(R.id.stop_checkedtextbox); 
      if(listView.isItemChecked(position)){ 
       checkedTextView.setChecked(true); 
      }else{ 
       checkedTextView.setChecked(false); 
      } 
      return convertView; 
     } 
    }; 

Код не проверен. Надеюсь, это поможет!

+0

Спасибо, что это сработало, но я застрял в новой проблеме, мой список был невидимым, когда я тост для OnClicks, я получаю правильный ответ – vicky

+0

Я видел код, который вы публикуете в следующем ответе. Попробуйте заменить надуватель с getActivity(). GetLayoutInflater(). Я думаю, что код, показанный вами, находится в onCreateView() фрагмента. Поэтому у вас есть раздув, когда создается представление. Но когда щелкнут элемент списка, у вас нет раздува для раздувания представления. –

+0

Bingo !! В getView() мне также нужно установить текст так, чтобы он выглядел пустым, этот фрагмент кода был проверен checkTextView.setText (listView.getItemAtPosition (position) .toString()); – vicky

0

попробовать это один

final ListView listView = (ListView) findViewById(R.id.BusRoutesList); 
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.routes_list_item,R.id.stop_checkedtextbox, routesSubList); 
listView.setAdapter(arrayAdapter); 
View v = listView.getAdapter().getView(i, null, null); 
CheckedTextView checkedTextView = (CheckedTextView)v.findViewById(R.id.stop_checkedtextbox); 
    for (int i = 0; i < routesSubList.size(); i++) { 
     if (selectedRoutesList.contains(routesSubList.get(i))){ 
      checkedTextView.setChecked(true); 
     } 
     else { 
      checkedTextView.setChecked(false); 
      } 
     } 
+0

Пробовал Не работал – vicky

0

Override GetView() и обновление CheckedTextview, в то время как Pre-заселение ListView набор

listView.setItemChecked(i, true); 
@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.routes_list_item, parent, false); 
     } 
     if (convertView != null) { 
      CheckedTextView checkedTextView = (CheckedTextView) convertView.findViewById(R.id.stop_checkedtextbox); 
      if (listView.isItemChecked(position)) { 
       checkedTextView.setChecked(true); 
      } else { 
       checkedTextView.setChecked(false); 
      }