2016-04-18 26 views
0

私のリストビューには、6つのtextViewと1つのRadioButtonが含まれています。まず、マルチラインlistViewから選択したアイテムを取得する方法。私は何かしようとしましたが、setOnItemClickListenerは動作しません。マルチラインリストビューから選択した項目を取得する方法

もう1つの疑問は、ListViewで一度にラジオボタンを1つだけ選択する方法です。 一度に1つのアイテムだけをチェックすることを許可します。実行する方法。

マイフラグメント:

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; 
} 
} 

ありがとうございます!!!第一の質問には

答えて

0

あなたがListView XML

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

inおよびJavaに2行を追加します(クラスでアクセス可能)と、すべての最初のフィールドとしてitemListを行い、リストから単一の項目にアクセスするには

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(); 
    } 
    }); 

2番目の質問の場合 AdapterクラスでRadioButtonのリスナーを定義してください。

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

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; 
} 
+0

第一質問、onclickListener – hikoo

+0

には反応はXMLのリストビューで アンドロイド2行を追加していないがあります:フォーカス可能=「false」を アンドロイド:focusableInTouchMode – Attaullah

+0

=「false」に私は追加されていませんが、それでも、コード上で何の反応 – hikoo

関連する問題