Get selected item from customadapter listview Android
25,571
Solution 1
Try this..
@Override
public void onItemClick(AdapterView<?> parent, View v, int pos, long id) {
TextView textview1 = (TextView) v.findViewById(R.id.text1);
TextView textview2 = (TextView) v.findViewById(R.id.text2);
Log.v("textview1",textview1.getText().toString().trim());
Log.v("textview2",textview2.getText().toString().trim());
}
Solution 2
On item click get the current view, get it's ui elements ex TextView title, and send them to intent
@Override
public void onItemClick(AdapterView<?> parent, View v, int pos, long id)
{
if (v== null)
v= inflater.inflate(R.layout.list_row_layout, null); // reached in case of listview bug in android which is a little chance but to make sure not to crash on NPE
String title = ((TextView) v.findViewById(R.id.list_row_title)).getText();
String price = ((TextView) v.findViewById(R.id.list_row_price)).getText();
i = new Intent(this, ViewHouse.class);
i.putExtra(strHouseName, title );
i.putExtra(strHousePrice, price );
startActivity(i);
}
Solution 3
Sure for an example
//DatasetClass
public class HouseData{
//private String HouseName= "";
private String HousePrice = "";
/*public String getHouseName() {
return HouseName;
}
public void setHouseName(String HouseName) {
this.HouseName= HouseName;
}*/
public String getHousePrice () {
return HousePrice ;
}
public void setHousePrice (String HousePrice ) {
this.HousePrice = HousePrice ;
}
//viewholder class is as:-
public class ViewHolder
{
public TextView tv_HousePrice,tv_HouseName
}
//and here is the getview method here.
public View getView(final int position, View convertView,
ViewGroup parent) {
final ViewHolder holder;
//holder=new ViewHolder();
View listrow = convertView;
activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
if (listrow == null) {
LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
listrow = vi.inflate(R.layout.your_listview_item_layout, null);
holder=new ViewHolder();
holder.tv_HouseName=(TextView)listrow.findViewById(R.id.tv_name);
holder.tv_HousePrice=(EditText)listrow.findViewById(R.id.tv_price);
listrow.setTag(holder);
}
else
holder=(ViewHolder)listrow.getTag();
listrow.setBackgroundColor(((position % 2)!=0) ? Color.rgb(229,229,229) : Color.WHITE);
try {
houseData= getItem(position);
if (houseData!= null) {
holder.tv_HouseName.setText(""+houseData.getHouseName());
holder.tv_HousePrice.setText(""+houseData.getHousePrice());
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
listrow.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//here you can pass complete data object to next activity
}
});
return listrow;
}
Comments
-
Dunkey almost 2 years
what I've been doing is about customadapter. Now I want to get the selected item from my listview, but it's adapter is custom. In my listview, I have an image, title and a caption, I want to get the selected item, in my case just the title. How do I do that?
Here's what I've tried so far:
@Override public void onItemClick(AdapterView<?> parent, View v, int pos, long id) { String strHouseName = "house_name"; String strHousePrice = "house_price"; //String selectedFromList =(String) (lv.getItemAtPosition(pos)); Intent i; switch(pos){ case 0: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "5 Dina Retreat, Carrum Downs"); i.putExtra(strHousePrice, "$300,000.00"); startActivity(i); break; case 1: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 941 Cob Terrace, Clyde North"); i.putExtra(strHousePrice, "$800,000.00"); startActivity(i); break; case 2: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 932 Ventasso Street, Clyde"); i.putExtra(strHousePrice, "$1,000,000.00"); startActivity(i); break; case 3: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 515 Summerhill Blvd, Drouin"); i.putExtra(strHousePrice, "$300,000.00"); startActivity(i); break; case 4: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 17 Todman Street, Drouin (Option 2)"); i.putExtra(strHousePrice, "$550,000.00"); startActivity(i); break; case 5: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 32 Aqueduct Road, Langwarrin"); i.putExtra(strHousePrice, "$600,000.00"); startActivity(i); break; case 6: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Units 2-7, 269 North Road, Langwarin"); i.putExtra(strHousePrice, "$450,000.00"); startActivity(i); break; case 7: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "U 39, 40-60 Potts Road, Langwarrin"); i.putExtra(strHousePrice, "$1,300,000.00"); startActivity(i); break; case 8: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 1 McClenaghan Place, Pakenham"); i.putExtra(strHousePrice, "$2,000,000.00"); startActivity(i); break; case 9: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 2 McClenaghan Place, Pakenham"); i.putExtra(strHousePrice, "$300,000.00"); startActivity(i); break; case 10: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 3 McClenaghan Place, Pakenham"); i.putExtra(strHousePrice, "$900,000.00"); startActivity(i); break; case 11: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 4 McClenaghan Place, Pakenham"); i.putExtra(strHousePrice, "$600,000.00"); startActivity(i); break; case 12: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 5 McClenaghan Place, Pakenham"); i.putExtra(strHousePrice, "$1,200,000.00"); startActivity(i); break; case 13: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 7 McClenaghan Place, Pakenham"); i.putExtra(strHousePrice, "$700,000.00"); startActivity(i); break; case 14: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 11 McClenaghan Place, Pakenham"); i.putExtra(strHousePrice, "$500,000.00"); startActivity(i); break; case 15: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 12 McClenaghan Place, Pakenham"); i.putExtra(strHousePrice, "$3,000,000.00"); startActivity(i); break; case 16: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 532 Summerhill Blvd, Drouin"); i.putExtra(strHousePrice, "$300,000.00"); startActivity(i); break; case 17: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 17 Ajax Street, Drouin"); i.putExtra(strHousePrice, "$300,000.00"); startActivity(i); break; case 18: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 133 Mountainview Blvd, Cranbourne North"); i.putExtra(strHousePrice, "$300,000.00"); startActivity(i); break; case 19: i = new Intent(this, ViewHouse.class); i.putExtra(strHouseName, "Lot 531 Summerhill Blvd, Drouin"); i.putExtra(strHousePrice, "$300,000.00"); startActivity(i); break; default: Log.d(strHouseName, "No such house name available"); } } class MyCustomAdapter extends BaseAdapter { String[] data_text1; String[] data_text2; int[] data_image; MyCustomAdapter() { data_text1 = null; data_text2 = null; data_image = null; } MyCustomAdapter(int[] image, String[] house, String[] price) { data_text1 = house; data_text2 = price; data_image = image; } public int getCount() { return data_text1.length; } public String getItem(int position) { return null; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = getLayoutInflater(); View row; row = inflater.inflate(R.layout.listrow, null); TextView textview1 = (TextView) row.findViewById(R.id.text1); TextView textview2 = (TextView) row.findViewById(R.id.text2); ImageView imageview = (ImageView) row.findViewById(R.id.image); imageview.setScaleType(ImageView.ScaleType.FIT_XY); textview1.setText(data_text1[position]); textview2.setText("$" + (new DecimalFormat("#,###.00")).format(Double.parseDouble(data_text2[position])) ); imageview.setImageResource(data_image[position]); return (row); } }
For the mean time, I just get via its position, but the issue is, what if the list is sorted? How can get the correct selected item? Any ideas? I'd gladly appreciate it. Thanks.