将ID与Android列表视图行关联

时间:2014-10-14 17:44:42

标签: android android-listview android-ksoap2

我有一组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。但事实并非如此。非常感谢任何帮助。

2 个答案:

答案 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();

            }
        });