如何在另一个 activity 中显示点击的列表视图项目
How to display clicked listview item in another activity
我无法使用 setOnItemClickListener 方法在另一个 activity 中显示适当的 listItem。我用 Firebase 来做这个。我有 3 个变量(字符串):姓名,Phone,电子邮件
我在 MainActivity 中的代码片段:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ChatMessage selectedList = adapter.getItem(position);
if(selectedList != null) {
Intent intent = new Intent(MainActivity.this, MainDetails.class);
long listId = adapter.getItemId(position);
intent.putExtra(Constants.KEY_LIST_ID, listId);
startActivity(intent);
}
}
});
KEY_LIST_ID 在 Constants.class:
public static final String KEY_LIST_ID = "LIST_ID";
需要这个KEY_LIST_ID来保存每个itemId?
聊天适配器:
public class ChatAdapter extends ArrayAdapter<ChatMessage> {
public ChatAdapter(Context context, int resource) {
super(context, resource);
}
@Override
public ChatMessage getItem(int position) {
return super.getItem(getCount() - 1 - position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView==null){
LayoutInflater inflater = ((Activity) getContext()).getLayoutInflater();
convertView = inflater.inflate(R.layout.list_item, parent, false);
viewHolder = new ViewHolder();
viewHolder.username = (TextView) convertView.findViewById(R.id.list_item_username);
viewHolder.message = (TextView) convertView.findViewById(R.id.list_item_message);
viewHolder.email = (TextView) convertView.findViewById(R.id.list_item_email);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
ChatMessage item = getItem(position);
if(item != null) {
viewHolder.username.setText(item.getName());
viewHolder.message.setText(item.getPhone());
viewHolder.email.setText(item.getEmail());
}
return convertView;
}
private static class ViewHolder{
TextView username;
TextView message;
TextView email;
}
}
MainDetails: Activity 应显示适当的 listItem:
private TextView detailsName, detailsPhone, detailsEmail;
private ChatMessage chatMessage;
private ListView listView;
private ChatAdapter chatAdapter;
private String listId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_details);
detailsName = (TextView) findViewById(R.id.detsName);
detailsPhone = (TextView) findViewById(R.id.detsText);
detailsEmail = (TextView) findViewById(R.id.detsEmail);
Intent intent = this.getIntent();
listId = intent.getStringExtra(Constants.KEY_LIST_ID);
}
现在,它在 MainDetails 中没有任何显示。
有人可以帮助我如何显示此 Activity 中的每个 ListItem 吗?
您将 listId 设为 long
。所以使用:
long listId = intent.getLongExtra(Constants.KEY_LIST_ID, -1L);
编辑:
要获取用户名,phone 和电子邮件:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ChatMessage selectedList = adapter.getItem(position);
if(selectedList != null) {
Intent intent = new Intent(MainActivity.this, MainDetails.class);
// long listId = adapter.getItemId(position);
intent.putExtra(Constants.KEY_LIST_NAME, selectedList.getName());
intent.putExtra(Constants.KEY_LIST_PHONE, selectedList.getPhone());
intent.putExtra(Constants.KEY_LIST_EMAIL, selectedList.getEmail());
startActivity(intent);
}
}
});
在 MainDetails
Intent intent = this.getIntent();
name= intent.getStringExtra(Constants.KEY_LIST_NAME);
phone= intent.getStringExtra(Constants.KEY_LIST_PHONE);
email= intent.getStringExtra(Constants.KEY_LIST_EMAIL);
我无法使用 setOnItemClickListener 方法在另一个 activity 中显示适当的 listItem。我用 Firebase 来做这个。我有 3 个变量(字符串):姓名,Phone,电子邮件
我在 MainActivity 中的代码片段:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ChatMessage selectedList = adapter.getItem(position);
if(selectedList != null) {
Intent intent = new Intent(MainActivity.this, MainDetails.class);
long listId = adapter.getItemId(position);
intent.putExtra(Constants.KEY_LIST_ID, listId);
startActivity(intent);
}
}
});
KEY_LIST_ID 在 Constants.class:
public static final String KEY_LIST_ID = "LIST_ID";
需要这个KEY_LIST_ID来保存每个itemId?
聊天适配器:
public class ChatAdapter extends ArrayAdapter<ChatMessage> {
public ChatAdapter(Context context, int resource) {
super(context, resource);
}
@Override
public ChatMessage getItem(int position) {
return super.getItem(getCount() - 1 - position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView==null){
LayoutInflater inflater = ((Activity) getContext()).getLayoutInflater();
convertView = inflater.inflate(R.layout.list_item, parent, false);
viewHolder = new ViewHolder();
viewHolder.username = (TextView) convertView.findViewById(R.id.list_item_username);
viewHolder.message = (TextView) convertView.findViewById(R.id.list_item_message);
viewHolder.email = (TextView) convertView.findViewById(R.id.list_item_email);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
ChatMessage item = getItem(position);
if(item != null) {
viewHolder.username.setText(item.getName());
viewHolder.message.setText(item.getPhone());
viewHolder.email.setText(item.getEmail());
}
return convertView;
}
private static class ViewHolder{
TextView username;
TextView message;
TextView email;
}
}
MainDetails: Activity 应显示适当的 listItem:
private TextView detailsName, detailsPhone, detailsEmail;
private ChatMessage chatMessage;
private ListView listView;
private ChatAdapter chatAdapter;
private String listId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_details);
detailsName = (TextView) findViewById(R.id.detsName);
detailsPhone = (TextView) findViewById(R.id.detsText);
detailsEmail = (TextView) findViewById(R.id.detsEmail);
Intent intent = this.getIntent();
listId = intent.getStringExtra(Constants.KEY_LIST_ID);
}
现在,它在 MainDetails 中没有任何显示。
有人可以帮助我如何显示此 Activity 中的每个 ListItem 吗?
您将 listId 设为 long
。所以使用:
long listId = intent.getLongExtra(Constants.KEY_LIST_ID, -1L);
编辑: 要获取用户名,phone 和电子邮件:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ChatMessage selectedList = adapter.getItem(position);
if(selectedList != null) {
Intent intent = new Intent(MainActivity.this, MainDetails.class);
// long listId = adapter.getItemId(position);
intent.putExtra(Constants.KEY_LIST_NAME, selectedList.getName());
intent.putExtra(Constants.KEY_LIST_PHONE, selectedList.getPhone());
intent.putExtra(Constants.KEY_LIST_EMAIL, selectedList.getEmail());
startActivity(intent);
}
}
});
在 MainDetails
Intent intent = this.getIntent();
name= intent.getStringExtra(Constants.KEY_LIST_NAME);
phone= intent.getStringExtra(Constants.KEY_LIST_PHONE);
email= intent.getStringExtra(Constants.KEY_LIST_EMAIL);