2016-01-22 118 views
0

我已經在listview中實現了一個checkedtextview。問題是checkedtextview的狀態沒有改變或切換。CheckedTextview狀態不變/切換

這裏是適配器:

private class LanguageListAdapter extends BaseAdapter 

    { 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return curr.size(); 
     } 

     @Override 
     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 


     @Override 
     public int getViewTypeCount() { 
      // TODO Auto-generated method stub 
      return 2; 
     } 


     @Override 
     public int getItemViewType(int position) { 
      // TODO Auto-generated method stub 

      MicrosoftLanguage item = curr.get(position); 
      String codecurr= item.getCode(); 
      String code= preflang.getString(Constants.ACCESS_LANGUAGE,"en"); 
      System.out.println("selected--->code--->"+code); 
      if(codecurr.equals(code)) 
      { 
       System.out.println("Returning equals"); 
       return 1; 
      } 
      return 0; 

     } 

     @SuppressLint("InflateParams") 
     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      final ViewHolder viewHolder; 

      if (convertView == null) { 
       viewHolder = new ViewHolder(); 
       convertView = getLayoutInflater().inflate(R.layout.layout_list_lang, null); 


       viewHolder.tvm_lang = (CheckedTextView) convertView 
         .findViewById(R.id.tv_lang); 
       convertView.setTag(viewHolder); 

      }else 
      { 
       viewHolder = (ViewHolder) convertView.getTag(); 
      } 


      int type=getItemViewType(position); 


      if(type==1) 
      { 
       viewHolder.tvm_lang.setChecked(true); 
      }else{ 
       viewHolder.tvm_lang.setChecked(false); 
      } 

      MicrosoftLanguage item = curr.get(position); 
      String name= item.getName(); 
      viewHolder.tvm_lang.setText(name); 





      viewHolder.tvm_lang.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        MicrosoftLanguage item = curr.get(position); 
        String name= item.getCode(); 
        //viewHolder.tvm_lang.setChecked(true); 
        SharedPreferences.Editor editor = preflang.edit(); 
        // System.out.println(projectid+"--->In Projectactivity"); 
        editor.putString(Constants.ACCESS_LANGUAGE,name); 

        editor.commit(); 

        viewHolder.tvm_lang.toggle(); 


       /* if(((CheckedTextView) v).isChecked()){ 
         ((CheckedTextView) v).setChecked(false); 
        }else{ 
         ((CheckedTextView) v).setChecked(true);    
        }*/ 
       } 
      }); 
      return convertView; 
     } 

     class ViewHolder { 
      CheckedTextView tvm_lang; 
     } 

    } 

爲ListView的XML文件

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

<CheckedTextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="test" 
    android:checkMark="?android:attr/listChoiceIndicatorSingle" 
    android:clickable="true" 
    android:textSize="18sp" 
    android:padding="10dp" 
    android:layout_marginLeft="10dp" 
    android:textColor="#ffffff" 
    android:id="@+id/tv_lang"/> 
</LinearLayout> 

輸出:

enter image description here

正如你所看到的,我可以選擇多個項目,我不想要。 當我點擊列表視圖中的一個新項目時,原先選擇的textview並未被取消選中。 請幫忙。

+0

'android:checkMark =「?android:attr/listChoiceIndicatorSingle」'不工作? –

+0

更多屏幕可能對此有所幫助。 – childofthehorn

+0

不幸的是..... – kgandroid

回答

0

它可能太晚了。你有沒有嘗試過使用OnItemClickListener,而不是onClickListener。