我有一组User对象。我只在列表视图中显示名字和姓氏(通过我已经实现的toString()方法)。
public class User
{
public int UserID;
public String FirstName;
public String LastName;
@Override public String toString() {
StringBuilder result = new StringBuilder();
result.append(this.FirstName + " " + this.LastName);
return result.toString();
}
}
我使用以下适配器定义将User对象数组绑定到List View。
ArrayAdapter<User> adapter = new ArrayAdapter<User>(MainActivity.this, android.R.layout.simple_list_item_1, android.R.id.text1, users); // Users is defined as User[] users; somewhere in the code.
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener ()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
// Here I would like to get the UserID
}
});
如果您需要更多背景资料。我的用户对象(用户)数组通过ksoap2 Webservice调用填充。据我所知,如果我使用的是SimpleCursorAdapter,则在public void onItemClick(AdapterView parent,View view,int position,long id)中的long id会自动成为我感兴趣的id。但事实并非如此。非常感谢任何帮助。
答案 0 :(得分:2)
您只需要从列表中获取User
对象。
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
User user = (User)parent.getItemAtPosition(position);
long userId = user.UserID;
}
如果您希望long id
成为用户的正确ID,则需要覆盖getItemId
的{{1}}。例如:
ArrayAdapter
我没有对此进行测试,但我认为它应该可行。我也不建议使用ArrayAdapter<User> adapter =
new ArrayAdapter<User>(MainActivity.this, android.R.layout.simple_list_item_1, android.R.id.text1, users){
@Override
public long getItemId(int position){
return getItem(position).UserID;
}
};
。如果基础数据从原始users[position]
数组发生更改,最好依赖getItem(position)
。
答案 1 :(得分:0)
您应该尝试以下
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Toast.makeText(getApplicationContext(), adapter.UserId[position], Toast.LENGTH_SHORT).show();
}
});