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.