开发者社区 问答 正文

一个Activity引用了另一个Activity,但是显示时listView的点击事件无效,报错

一个Activity中引用了另一个Activity,另一个Activity中有一个listview,listview有点击事件,为何在第一个Activity中显示的listview点击无效,求大牛解释并解决,急啊!!!!

展开
收起
huc_逆天 2020-05-28 14:30:32 751 分享 版权
阿里云 AI 助理回答

在Android开发中,Activity之间是通过Intent进行跳转和数据传递的。当你在一个Activity(我们称它为Activity A)中“引用”了另一个Activity(我们称它为Activity B),实际上应该是从Activity A启动Activity B,并不是直接在A中显示B的UI组件,比如ListView。

如果你想要在Activity A中响应Activity B中的ListView点击事件,这通常涉及到设计模式上的调整,因为直接在A中操作B的UI违背了Android的Activity设计原则。正确的做法是让Activity B处理自己的ListView点击事件,并通过Intent或其它方式将点击的结果返回给Activity A。

解决方法如下:

  1. 在Activity B中处理ListView点击事件
    • 在Activity B的onCreate()方法中,为ListView设置一个OnItemClickListener。
    • 在这个监听器里处理点击逻辑,比如打开新页面、更新数据等。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // 处理点击事件,例如根据position获取数据,然后使用Intent传回给Activity A
        Intent resultIntent = new Intent();
        resultIntent.putExtra("selectedItem", yourDataList.get(position)); // 假设yourDataList是你的数据源
        setResult(RESULT_OK, resultIntent);
        finish(); // 关闭当前Activity B
    }
});
  1. 在Activity A中接收Activity B的结果
    • 在启动Activity B时,使用startActivityForResult()方法,并设置一个请求码。
    • 重写Activity A的onActivityResult()方法来处理从B返回的数据。
// 在Activity A中启动Activity B
Intent intent = new Intent(this, ActivityB.class);
startActivityForResult(intent, REQUEST_CODE_B); // REQUEST_CODE_B是一个你自定义的整数,用于识别请求来源

// 重写onActivityResult方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_B && resultCode == RESULT_OK) {
        // 获取并处理从Activity B返回的数据
        String selectedItem = data.getStringExtra("selectedItem");
        // 根据selectedItem做相应处理
    }
}

这样,当用户在Activity B中点击ListView项后,Activity B会关闭,并将选择的数据通过Intent传回给Activity A,在A中处理这个结果。这样的设计符合Android应用的架构原则,也使得代码更加清晰和模块化。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: