2017-10-04 35 views
-1

我有一个单选按钮项的列表视图。Android listviewadapter单选按钮setChecked第一项,当点击其他项时,第一项将被取消选中

这里是我的片段中的代码。

ListViewAdapterShipping.AdapterInterface listener = new ListViewAdapterShipping.AdapterInterface() { 
    @Override 
    public void onClick(String value, String price, String symbol, String name, String desc, String shipicon, String weight, String module){ 
     textShippingRateId.setText(value); 
     textShippingRate.setText(price); 
     textSymbol.setText(symbol); 
     textNameName.setText(name); 
     textDescDesc.setText(desc); 
     textShipIcon.setText(shipicon); 
     textShipWeight.setText(weight); 
     textShipModule.setText(module); 
    } 
}; 

shippingrateadapter = new ListViewAdapterShipping(getActivity(), shippingratearraylist, listener); 
shippingratelistview.setAdapter(shippingrateadapter); 
shippingratelistview.setExpanded(true); 

我想在第一次加载时选择第一项。那么当用户点击另一个项目时,第一个和其他项目将被取消选中。

这里是我的适配器。

package com.example.administrator.mosbeau; 

import android.content.Context; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.RadioButton; 
import android.widget.TextView; 

import com.bumptech.glide.Glide; 
import com.bumptech.glide.load.engine.DiskCacheStrategy; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.StringTokenizer; 

public class ListViewAdapterShipping extends BaseAdapter { 

    boolean expanded = false; 

    Context context; 
    LayoutInflater inflater; 
    ArrayList<HashMap<String, String>> data; 
    HashMap<String, String> resultp = new HashMap<String, String>(); 
    AdapterInterface listener; 

    public interface AdapterInterface 
    { 
     void onClick(String value, String price, String symbol, String name, String desc, String shipicon, String weight, String module); 
    } 

    public ListViewAdapterShipping(Context context, 
          ArrayList<HashMap<String, String>> arraylist, AdapterInterface listener) { 
     this.context = context; 
     this.listener = listener; 
     data = arraylist; 
    } 

    String mconfiguration_id, mshipping_price, mshipping_symbol, mshipping_title, mshipping_desc, mshipping_icon, mmshipping_icon, mshipping_weight, mmshipping_weight, mshipping_module; 

    private RadioButton mSelectedRB; 
    private int mSelectedPosition = 0; 

    @Override 
    public int getCount() { 
     return data.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) { 
     TextView configuration_id; 
     RadioButton shipping_title; 
     TextView shipping_weight; 
     ImageView shipping_icon; 
     TextView shipping_price; 
     TextView shipping_symbol; 
     TextView shipping_desc; 
     TextView shippingicon; 
     TextView shippingmodule; 

     inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View itemView = inflater.inflate(R.layout.shippingrate_item, parent, false); 
     resultp = data.get(position); 

     configuration_id = (TextView) itemView.findViewById(R.id.textconfigurationid); 
     shipping_title = (RadioButton) itemView.findViewById(R.id.radioShippingtitle); 
     shipping_weight = (TextView) itemView.findViewById(R.id.textWeight); 
     shipping_icon = (ImageView) itemView.findViewById(R.id.shipping_icon); 
     shipping_price = (TextView) itemView.findViewById(R.id.textPrice); 
     shipping_symbol = (TextView) itemView.findViewById(R.id.textSymbol); 
     shipping_desc = (TextView) itemView.findViewById(R.id.textDesc); 
     shippingicon = (TextView) itemView.findViewById(R.id.textshippingicon); 
     shippingmodule = (TextView) itemView.findViewById(R.id.textshippingmodule); 

     configuration_id.setText(resultp.get(CheckoutFragment1.configuration_id)); 
     shipping_title.setText(resultp.get(CheckoutFragment1.shipping_title)); 
     shipping_weight.setText(resultp.get(CheckoutFragment1.shipping_weight)); 
     shipping_price.setText(resultp.get(CheckoutFragment1.shipping_price)); 
     shipping_symbol.setText(resultp.get(CheckoutFragment1.shipping_symbol)); 
     shipping_desc.setText(resultp.get(CheckoutFragment1.shipping_desc)); 
     shippingicon.setText(resultp.get(CheckoutFragment1.shipping_icon)); 
     shippingmodule.setText(resultp.get(CheckoutFragment1.shipping_module)); 

     Glide.with(context).load(resultp.get(CheckoutFragment1.shipping_icon)).diskCacheStrategy(DiskCacheStrategy.ALL).into(shipping_icon); 
     int color = 0xffffffff; 
     itemView.setBackgroundColor(color); 

     mconfiguration_id = configuration_id.getText().toString(); 
     mshipping_price = shipping_price.getText().toString(); 
     mshipping_symbol = shipping_symbol.getText().toString(); 
     mshipping_title = shipping_title.getText().toString(); 
     mshipping_desc = shipping_desc.getText().toString(); 
     mshipping_icon = shippingicon.getText().toString(); 
     mshipping_weight = shipping_weight.getText().toString(); 
     mshipping_module = shippingmodule.getText().toString(); 
     if(mshipping_icon.matches("")){ 
      mmshipping_icon = "null"; 
     }else{ 
      mmshipping_icon = mshipping_icon; 
     } 
     if(mshipping_weight.matches("")){ 
      mmshipping_weight = "null"; 
     }else{ 
      mmshipping_weight = mshipping_weight; 
     } 
     shipping_title.setTag(mconfiguration_id + "#" + mshipping_price + "#" + mshipping_symbol + "#" + mshipping_title + "#" + mshipping_desc + "#" + mmshipping_icon + "#" + mmshipping_weight + "#" +mshipping_module); 
     shipping_title.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (position != mSelectedPosition && mSelectedRB != null) { 
        mSelectedRB.setChecked(false); 
       } 

       mSelectedPosition = position; 
       mSelectedRB = (RadioButton) v; 

       Log.e("mSelectedRB",Integer.toString(mSelectedPosition)); 

       String CurrentString; 
       CurrentString = v.getTag().toString(); 
       StringTokenizer tokens = new StringTokenizer(CurrentString, "#"); 
       String mconfiguration_id = tokens.nextToken(); 
       String mshipping_price = tokens.nextToken(); 
       String mshipping_symbol = tokens.nextToken(); 
       String mshipping_title = tokens.nextToken(); 
       String mshipping_desc = tokens.nextToken(); 
       String mmshipping_icon = tokens.nextToken(); 
       String mmshipping_weight = tokens.nextToken(); 
       String mshipping_module = tokens.nextToken(); 

       if(listener != null) 
        listener.onClick(mconfiguration_id, mshipping_price, mshipping_symbol, mshipping_title, mshipping_desc, mmshipping_icon, mmshipping_weight, mshipping_module); 
      } 

     }); 

     if(mSelectedPosition != position){ 
      shipping_title.setChecked(false); 
     }else{ 
      shipping_title.setChecked(true); 
      if(mSelectedRB != null && shipping_title != mSelectedRB){ 
       mSelectedRB = shipping_title; 
      } 
     } 

     return itemView; 
    } 
} 

,你可以在我的适配器private int mSelectedPosition = 0;设置为零看,这意味着第一个项目被选中。但是当我点击其他项目。第一项仍然被检查。

+0

不那么高效'ListView.invalidateViews'更高效:谷歌 – Selvin

+1

在onclick“事件在ListView重绘单行”一旦你设置选择的位置进行尝试notifydatasetchanged。 –

+0

@shreyashmashru谢谢.. – Joehamir

回答

1

在OnClick完成设置选定位置后,您必须执行notifydatasetchanged。 更多信息here

0

保持一个计数器来检查哪个位置被检查。将其声明为全局变量。

private int mCheckedPosition=-1; 

然后在点击任何物品保存检查位置,并使用notifyDataSetChanged()以通知的数据去改变。

点击onclick方法内的复选框添加此项。

mCheckedPosition=position; 
notifyDataSetChanged(); 
在getView方法

然后

if(mCheckedPosition==-1){ 

    //set first view as checked initially 

}else if(mCheckedPosition==position){ 

    //set the clicked view as checked 

}else{ 

    //set the other views unchcked 
} 
相关问题