2

我有一个setOnItemClickListener方法的挑战,在另一个活动中显示适当的listItem。我使用Firebase执行此操作。我有3个变量(字符串):姓名,电话,电子邮件如何在另一个活动中显示点击的listview项目

我的代码片段在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?

ChatAdapter:

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:活动应该显示相应的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。

有人可以帮助我如何显示每个ListItem在这个活动?

回答

1

您将listId设为long。因此,使用:

long listId = intent.getLongExtra(Constants.KEY_LIST_ID, -1L);

编辑: 得到用户的姓名,电话和电子邮件:

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); 
+0

它不工作。这意味着什么都不显示 – gryzek

+0

你的问题不清楚。你得到空listId?或null selectedList?你是否尝试打印listId,如果它是空的? – uguboz

+0

我改变了listId,正如你所说的,在MainDetails中变长。但它没有帮助解决问题。在这个MainDetails活动中,我想从listView中显示特定的姓名,电子邮件和电话。 – gryzek

相关问题