2016-05-18 48 views
0

即時通過使用波紋管代碼中選擇的ListView項(這是基於CheckedTextView)機器人:取消選擇所有CheckedTextView除了本一個

lvReport.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 

     rlAdapterReport = (RelativeLayout) view.findViewById(R.id.rl_lv_report_user); 
     tvAdapterReportOption = (CheckedTextView) view.findViewById(R.id.tv_lv_report_user_title); 

     if (tvAdapterReportOption.isChecked()) { 
      //value = "un-Checked"; 
      tvAdapterReportOption.setCheckMarkDrawable(0); 
      tvAdapterReportOption.setTextColor(Color.parseColor("#000000")); 
      rlAdapterReport.setBackgroundColor(Color.parseColor("#FFFFFF")); 
      tvAdapterReportOption.setChecked(false); 
     } else { 
      //value = "Checked"; 

      Drawable dr = getResources().getDrawable(R.drawable.report_tick_icon); 
      Bitmap bitmap = ((BitmapDrawable) dr).getBitmap(); 
      Drawable finalDrawable = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap, 50, 50, true)); 

      tvAdapterReportOption.setCheckMarkDrawable(finalDrawable); 
      tvAdapterReportOption.setTextColor(Color.parseColor("#04CFE7")); 
      rlAdapterReport.setBackgroundColor(Color.parseColor("#D5D5D5")); 
      tvAdapterReportOption.setChecked(true); 
     } 
    } 
}); 

通過使用上述代碼我能夠選擇所有項目(理解見附圖),但我想一次選擇單個項目。所以,我想取消選擇所有項目,如果已​​經選擇

enter image description here

編輯

我的適配器(ArrayAdapter)getView代碼

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
ViewHolder holder = null; 

final ReportUserItems rowItem = getItem(position); 

LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
if (convertView == null){ 
    convertView = mInflater.inflate(R.layout.lv_report_user_adapter, null); 
    holder = new ViewHolder(); 

    holder.rlReport = (RelativeLayout) convertView.findViewById(R.id.rl_lv_report_user); 
    holder.tvReportOption = (CheckedTextView) convertView.findViewById(R.id.tv_lv_report_user_title); 

    convertView.setTag(holder); 
} 
else{ 
    holder = (ViewHolder) convertView.getTag(); 
} 

return convertView; 
} 
+0

發佈您的適配器'getView()'方法.. – Bharatesh

+0

@skadoosh:嗨請參閱我的編輯 – Bahu

+0

您是否使用ArrayAdapter的底層數組?除非我錯過了它,否則我沒有看到任何參考。 – Cheticamp

回答

2

在您的適配器類店所選擇的行每當用戶點擊其他項目時都進行位置更新和刷新。

您的Adpater類更改。

int selectedPosition = -1; //to store only selected item position 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder = null; 
    final ReportUserItems rowItem = getItem(position); 
    LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) { 
     //your code 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    //your other code 


    if (selectedPosition != -1) 
     if (selectedPosition == position) { 
      //your drawable code 
      holder.tvReportOption.setCheckMarkDrawable(finalDrawable); 
      holder.tvReportOption.setChecked(true); 
      //your other stuff : changing color etc 
     } else { 
      holder.tvReportOption.setCheckMarkDrawable(0); 
      holder.tvReportOption.setChecked(false); 
      //your other stuff : changing color etc 
     } 

    return convertView; 
} 

//create this method in Adapter class 
public void setSelected(int pos) { 
    selectedPosition = pos; //change selected item position 
    notifyDataSetChanged(); //refresh views 
} 

活動代碼改變

lvReport.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 
     adapter.setSelected(position); 
    } 
}); 

happyCodnig;

+0

它的工作,你是一個英雄。 happyCodnig; – Bahu

相關問題