I have a listview and i am populating the data to the list view form DB using custom adapter. Its working fine, but when i click on the list item, i want to get the ID of the item which is clicked to pass it on to the next activity to do some stuff. But when i click on list item, i am not able to get the ID. Any idea why is this happening?
my list listener:
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View view, int position,
long id) {
Intent intent = new Intent(MainActivity.this,
CountryActivity.class);
intent.putExtra("countryId", adapter.getItem(position).getId());//here i am getting error saying
//The method getId() is undefined for the type Object.
startActivity(intent);
}
});
But i have defined my countries.java (POJO) for type specification
public class Countries {
Integer id;
String countryName = "", countryIcon = "";
public Countries(Integer id, String countryName, String countryIcon) {
this.id = id;
this.countryName = countryName;
this.countryIcon = countryIcon;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCountryName() {
return countryName;
}
public void setCountryName(String countryName) {
this.countryName = countryName;
}
public String getCountryIcon() {
return countryIcon;
}
public void setCountryIcon(String countryIcon) {
this.countryIcon = countryIcon;
}
}
i am fetching data out of cursor obj (visas) from the below code:
names = new ArrayList<Countries>();
do {
country = new Countries(Integer.parseInt(visas.getString(0)),
visas.getString(1), visas.getString(2));
// Log.d("VISA", visas.getString(0));
names.add(country);
} while (visas.moveToNext());
here is my adapter code:
public class VisaAdapter extends ArrayAdapter<Countries> {
private final Context context;
private final ArrayList<Countries> values;
Resources resc = getContext().getResources();
public VisaAdapter(Context context, ArrayList<Countries> values) {
super(context, R.layout.list_item, values);
this.context = context;
this.values = values;
}
@Override
public Countries getItem(int position) {
return values.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.list_item, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.label);
ImageView imageView = (ImageView) rowView.findViewById(R.id.logo);
textView.setText(values.get(position).getCountryName());
// Change icon based on name
String icon = values.get(position).getCountryIcon();
int resIcon = resc.getIdentifier(icon, "drawable", "com.m7.visaapp");
rowView.setBackgroundResource(R.drawable.list_view_places_row);
imageView.setImageResource(resIcon);
return rowView;
}
}
You must cast the getItem(position)
return value to a Countries
object.
Change this:
intent.putExtra("countryId", adapter.getItem(position).getId());
To this:
Countries countries = (Countries)adapter.getItem(position);
intent.putExtra("countryId", countries.getId());
Update:
Actually, after reading @Tushar's comment, I think you should make names
a VisaAdapter
instead of an ArrayList<Countries>()
. Then, your original line of code, above, should work as-is.