sur*_*udi 4 android listviewitem android-listview android-adapter
我有一个listview,我使用自定义适配器将数据填充到列表视图表单DB.它的工作正常,但是当我点击列表项时,我想获得被点击的项目的ID以将其传递给下一个活动来做一些事情.但是当我点击列表项时,我无法获得ID.知道为什么会这样吗?
我的列表监听器:
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);
}
});
Run Code Online (Sandbox Code Playgroud)
但是我已经为我的countries.java(POJO)定义了类型规范
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我从以下代码中获取光标obj(签证)中的数据:
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());
Run Code Online (Sandbox Code Playgroud)
这是我的适配器代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*arl 10
您必须将getItem(position)返回值强制转换为Countries对象.
改变这个:
intent.putExtra("countryId", adapter.getItem(position).getId());
Run Code Online (Sandbox Code Playgroud)
对此:
Countries countries = (Countries)adapter.getItem(position);
intent.putExtra("countryId", countries.getId());
Run Code Online (Sandbox Code Playgroud)
更新:
实际上,在阅读@Tushar的评论后,我认为你应该做names一个VisaAdapter而不是一个ArrayList<Countries>().然后,上面的原始代码行应该按原样运行.
adapter.getItem(position)
Run Code Online (Sandbox Code Playgroud)
function返回一个Objectso类型,将它强制转换为Country
(Countries)adapter.getItem(position)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27171 次 |
| 最近记录: |