2016-09-28 6 views
0

나는 안드로이드를 처음 접했고 이미 체크 된 몇 가지 요소가있는 화면에서 CheckedTextView를 사용하여 목록보기를 표시하려고합니다. 그러나 성공하지 못했습니다. 내 목록보기가 항상 선택 취소되었습니다. 여기 있습니다 난 당신이 목록보기를 사용자 정의 레이아웃을 준 것을CheckedTextView가있는 안드로이드 listView

+0

가있는 ListView에서보기를 확인하지 마십시오 - 그것은 무의미하다 - 그들은 재활용하고 , ListView에서 체크 할 항목을 올바르게 설정하려면 [ListView.setItemChecked] (https://developer.android.com/reference/android/widget/AbsListView.html) 메소드 – nekavally

+0

을 setItemChecked와 함께 사용해보십시오. for no luck for (int i = 0; i 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); 
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); 
       } 
      } 
     }); 

하십시오 조언, 나는 잘 모릅니다 . getView()를 오버라이드 (override) 할 수 있습니다.

 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

다음 답변에 게시하는 코드를 보았습니다. inflater를 getActivity(). getLayoutInflater()로 대체하십시오. 나는 당신이 보여준 코드가 Fragment의 onCreateView()에 있다고 생각한다. 따라서보기가 생성되면 인플레이터가 나타납니다. 그러나 목록 항목을 클릭하면보기를 인플레 할 수있는 인플레이터가 없습니다. –

+0

빙고 !! 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

재정의 getView()를 시도하고 CheckedTextview를 업데이트

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); 
      }