如何从自定义列表视图适配器获取数据并传递给intent更多?

时间:2017-06-17 10:32:47

标签: android

我有setOnItemClickListener个代码:

userListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        String user_name = String.valueOf(parent.getItemAtPosition(position));
        Log.i("data_items",user_name);
      Toast.makeText(MainActivity.this,user_name,Toast.LENGTH_SHORT).show();
    }
});

日志给了我:

pacakge.name.TableName@3131

点击的每一行都会在最后给出一个不同的数字。例如

pacakge.name.TableName@4131

它是我的SQLite的数据库吗?如何读入我的自定义列表适配器的onClickItemListene?

任何人都可以帮助我吗?

ArrayAdapater

的代码
private class UserListAdapter extends ArrayAdapter<UserList> {

        private ArrayList<UserList> items;
        public UserListAdapter(@NonNull Context context, @LayoutRes int textViewResourceId, @NonNull ArrayList<UserList> objects) {
            super(context, textViewResourceId, objects);
            this.items = objects;
        }

        @NonNull
        @Override
        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            View v = convertView;
            if(v == null)
            {
                LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = layoutInflater.inflate(R.layout.user_list_item,null);
            }

            UserList userList = items.get(position);
            if(userList != null)
            {
                TextView usernameTextView = (TextView) v.findViewById(R.id.usernameTextView);
                TextView fullnameTextViewFeatured = (TextView) v.findViewById(R.id.fullnameTextViewFeatured);
                if(usernameTextView != null)
                {
                    usernameTextView.setText(userList.getUser_name());
                }
                if(fullnameTextViewFeatured != null)
                {
                    fullnameTextViewFeatured.setText(userList.getFull_name());
                }
            }

            return v;
        }
    }

2 个答案:

答案 0 :(得分:1)

  

点击的每一行都会在最后给出不同的数字。例如

这是Object.toString的实施。您的适配器包含类型为TableName的数据集,而不是String。这条线

String user_name = String.valueOf(parent.getItemAtPosition(position));

错了。它应该是

 TableName tableName = (TableName) parent.getItemAtPosition(position);

转换为正确的类型后,您可以访问TableName的字段。

修改

看到你的适配器之后,看起来你正在使用UserList作为数据对象,所以正确的强制转换应该是UserList而不是TableName,这不是Logcat所展示的寿

答案 1 :(得分:1)

嗨,你可以这样做,

userListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        UserList userList = (UserList)parent.getItem(position);

        String user_name = userList.getUser_name();
        Log.i("data_items",user_name);
        Toast.makeText(MainActivity.this,user_name,Toast.LENGTH_SHORT).show();
    }
});