Android 如何从自定义列表视图适配器获取数据并传递给intent put extra?
我有Android 如何从自定义列表视图适配器获取数据并传递给intent put extra?,android,Android,我有setonicmclicklistener代码: userListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String user_name = String.value
setonicmclicklistener
代码:
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@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;
}
}
私有类UserListAdapter扩展了ArrayAdapter{
私有ArrayList项;
公共UserListAdapter(@NonNull上下文、@LayoutRes int textViewResourceId、@NonNull ArrayList对象){
超级(上下文、textViewResourceId、对象);
此项=对象;
}
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
视图v=转换视图;
如果(v==null)
{
LayoutInflater LayoutInflater=(LayoutInflater)getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
v=布局更平坦。充气(R.布局。用户列表项,空);
}
UserList UserList=items.get(位置);
if(userList!=null)
{
TextView用户名TextView=(TextView)v.findViewById(R.id.usernameTextView);
TextView fullnameTextViewFeatured=(TextView)v.findViewById(R.id.fullnameTextViewFeatured);
if(usernameTextView!=null)
{
usernameTextView.setText(userList.getUser_name());
}
如果(fullnameTextViewFeatured!=null)
{
fullnameTextViewFeatured.setText(userList.getFull_name());
}
}
返回v;
}
}
每单击一行,最后都会显示不同的数字。比如说
pacakge.name.TableName@4131
这是Object.toString
的实现。适配器保存的数据集类型为TableName
,而不是String。线路
String user_name = String.valueOf(parent.getItemAtPosition(position));
这是错误的。应该是
TableName tableName = (TableName) parent.getItemAtPosition(position);
转换到正确的类型后,您可以访问TableName
的字段
编辑
看到适配器后,看起来您正在使用UserList
作为数据对象,因此右转换应该是UserList
,而不是TableName
,这不是Logcat显示的,因为您可以这样做
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();
}
});
userListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
UserList UserList=(UserList)parent.getItem(position);
字符串user_name=userList.getUser_name();
Log.i(“数据项”,用户名);
Toast.makeText(MainActivity.this,用户名,Toast.LENGTH.SHORT.show();
}
});
输入适配器的代码PleaseArayadapter@blackbelt谢谢你的回答,Muthu给我一个我能理解的答案..如何将所有数据传递给putExtra?例如i.putExtra(“userData”,parent.getItemAtPosition(position))代码>是否正确?仅当对象可包裹时。举个例子,我的情况如何?对不起,我对安卓系统还不太熟悉。谷歌就可以了。它已经回答了很多次了