简体   繁体   中英

How to get selected item from multiLine Listview

In my listView contain 6 textView and one RadioButton.I have two doubts. First thing, How to get selected item from multiLine listView. I tried something but setOnItemClickListener not working.

Another doubt is, How to select only one radioButton at a time in ListView. I want to allow only one item to check at a time. how to do. Please anyone help to me..

Code below :

My fragment:

public class AddAddressFragment extends Fragment {

FloatingActionButton add;
ListView addressListView;
DBHelper mydb;
private ArrayList<String> strArr;
AddressCustomAdapter adapter;

ArrayList<AddressResult> itemList = new ArrayList<AddressResult>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_layout_add_address, container,
            false);
    addressListView = (ListView) view.findViewById(R.id.address_list);
    mydb = new DBHelper(this.getActivity());
    addressListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    strArr = mydb.getAllAddress();
    for(int i=0; i<strArr.size();i++){
        String[] a= strArr.get(i).split("\\$");
        itemList.add(new AddressResult(a[0],a[1],a[2],a[3],a[4],a[5]));
    }
    adapter = new AddressCustomAdapter(this.getActivity(),itemList);



    addressListView.setAdapter(adapter);
    addressListView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View arg1, int position, long id) {

            // TODO Auto-generated method stub

            Object obj = addressListView.getItemAtPosition(position);
            AddressResult fullObj = (AddressResult)obj;
            Toast.makeText(getActivity(), "You have chosen: " + " " + fullObj.getLine1(), Toast.LENGTH_LONG).show();


        }
    });


    add = (FloatingActionButton)view.findViewById(R.id.add_address);

    add.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            SharedPreferences shared = getActivity().getSharedPreferences("tagAddress", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = shared.edit();
            editor.putString("tag", "");
            editor.commit();

            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            AddressFragment fragment = new AddressFragment();
            transaction.replace(R.id.another_frame, fragment);
            transaction.commit();
        }
    });

    return view;
}

}

CustomAdapter:

public class AddressCustomAdapter extends BaseAdapter implements ListAdapter {

private final Context context;
private final ArrayList<AddressResult> itemsArrayList;

public AddressCustomAdapter(Context context, ArrayList<AddressResult> itemsArrayList) {
    this.context = context;
    this.itemsArrayList = itemsArrayList;

}

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

@Override
public Object getItem(int position) {
    return itemsArrayList.get(position);
}

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



@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = convertView;
    final ViewHolder holder;
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) ((Activity)context).getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.address_list,null);
        holder = new ViewHolder();

        holder.addrTypeTxt = (TextView)view.findViewById(R.id.addr);
        holder.line1Txt = (TextView)view.findViewById(R.id.addrLine1Txt);
        holder.line2Txt = (TextView)view.findViewById(R.id.addrLine2Txt);
        holder.areaTxt = (TextView)view.findViewById(R.id.addrAreaTxt);
        holder.cityTxt = (TextView)view.findViewById(R.id.addrCityTxt);
        holder.pincodeTxt = (TextView)view.findViewById(R.id.addrPincodeTxt);
        holder.radioButton = (RadioButton) view.findViewById(R.id.radioBtn);
        view.setTag(holder);
    }else{
        holder=(ViewHolder)view.getTag();
    }
    if(Utility.isNotNull(itemsArrayList.get(position).type)){
        holder.addrTypeTxt.setText(itemsArrayList.get(position).type);
    }else{
        Utility.textViewDisable(holder.addrTypeTxt);
    }

    if(Utility.isNotNull(itemsArrayList.get(position).line1)){
        holder.line1Txt.setText(itemsArrayList.get(position).line1);
    }else{
        Utility.textViewDisable(holder.line1Txt);
    }

    if(Utility.isNotNull(itemsArrayList.get(position).line2)){
        holder.line2Txt.setText(itemsArrayList.get(position).line2);
    }else{
        Utility.textViewDisable(holder.line2Txt);
    }

    if(Utility.isNotNull(itemsArrayList.get(position).area)){
        holder.areaTxt.setText(itemsArrayList.get(position).area);
    }else{
        Utility.textViewDisable(holder.areaTxt);
    }

    if(Utility.isNotNull(itemsArrayList.get(position).city)){
        holder.cityTxt.setText(itemsArrayList.get(position).city);
    }else{
        Utility.textViewDisable(holder.cityTxt);
    }

    if(Utility.isNotNull(itemsArrayList.get(position).pincode)){
        holder.pincodeTxt.setText(itemsArrayList.get(position).pincode);
    }else{
        Utility.textViewDisable(holder.pincodeTxt);
    }

    if(itemsArrayList.get(position).selFlag){
        holder.radioButton.setChecked(false);
    }

    return view;
}

public static class ViewHolder{
    public TextView addrTypeTxt;
    public TextView line1Txt;
    public TextView line2Txt;
    public TextView areaTxt;
    public TextView cityTxt;
    public TextView pincodeTxt;
    public RadioButton radioButton;
}

}

AddressResult.java:

public  class AddressResult {

String type = "";
String line1 = "";
String line2 = "";
String area ="";
String city = "";
String pincode = "";
Boolean selFlag;

public AddressResult(String type,String line1,String line2,String area,String city,String pincode){
    this.type = type;
    this.line1 = line1;
    this.line2 = line2;
    this.area = area;
    this.city = city;
    this.pincode = pincode;
    this.selFlag = false;
}

public void setType(String type){
    this.type = type;
}
public String getType(){
    return type;
}

public void setLine1(String line1){
    this.line1 = line1;
}

public  String getLine1(){
    return line1;
}

public void setLine2(String line2){
    this.line2 = line2;
}

public String getLine2(){
    return line2;
}

public void setArea(String area){
    this.area = area;
}

public String getArea(){
    return area;
}

public void setCity(String city){
    this.city = city;
}
public String getCity(){
    return city;
}

public void setPincode(String pincode){
    this.pincode = pincode;
}

public String getPincode(){
    return pincode;
}
}   

Thanks in advance!!!

For 1st Question: To access single item from list you Make itemList as field (accessible in class) and first of all add two line in ListView XML

   android:focusable="false"
   android:focusableInTouchMode="false"
   android:descendantFocusability="blocksDescendants"

And in java

addressListView.setOnItemClickListener(new OnItemClickListener() {
    @Override
     public void onItemClick(AdapterView<?> parent, View arg1, int position, long id) {

     AddressResult fullObj = itemList.get(position);
        // fullObj.getType(); access like this
        // fullObj.getLine1();
        // fullObj.getLine2();
        // fullObj.getArea();
        // fullObj.getCity();
        // obj.getPincode();

     Toast.makeText(getActivity(), "You have chosen:" +
                                "\n" + fullObj.getType()+
                                "\n" + fullObj.getLine1()+
                                "\n" + fullObj.getLine2()+
                                "\n" + fullObj.getArea()+
                                "\n" + fullObj.getCity()+
                                "\n" + fullObj.getPincode(), Toast.LENGTH_LONG).show();
    }
  });

For 2nd question please define listener for RadioButton in Adapter class.

//......
//......
//......

 if(itemsArrayList.get(position).selFlag){
        holder.radioButton.setChecked(false);
    }
// set listener on radiobutton in adapter like this
    holder.radioButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub

        }
    });

    return view;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM