如何从自定义 ListView 适配器传递 Intent Extra?

Posted

技术标签:

【中文标题】如何从自定义 ListView 适配器传递 Intent Extra?【英文标题】:How to pass an Intent Extra from a custom ListView Adapter? 【发布时间】:2014-06-04 12:29:18 【问题描述】:

我查看并搜索了其他示例,这些示例似乎说明了以下内容。

确保在数组适配器中声明了上下文

Context context;

    public ListViewJobAdapter(Context context, ArrayList jobItemsArrayList) 

        super(context, R.layout.tab3_list_row, jobItemsArrayList);
        this.context = context;
    

我重写了 ListView 适配器的 GetView。在此我有一个 textView onClick 操作,它启动一个带有附加功能的新活动。

@Override
public View getView(final int position, View convertView, ViewGroup parent) 

        textView.setOnClickListener(new View.OnClickListener() 
            public void onClick(View v) 

                Intent intentEditJob = new Intent(context,ActivityJobEdit.class);
                intentEditJob.putExtra("JOBID", "TEST");
                context.startActivity(intentEditJob);

现在 Actvitiy 开始,但 Extras 没有通过。

    Intent intentExtras = getIntent();
    String editJobID = intentExtras.getStringExtra("JOBID");

在客户 ListView 适配器中,如果我在 getView 之外调用 Intent 函数,它就会起作用并传递 Extra。不确定为什么在引用上下文时这在 GetView 的 onClick 中不起作用?现在我将使用在 GetView 之外调用它的解决方法。

public void callEditActivity()
    Intent intentEditJob = new Intent(context,ActivityJobEdit.class);
    intentEditJob.putExtra("TEST", "JOBID");
    context.startActivity(intentEditJob);

【问题讨论】:

【参考方案1】:

您似乎与用于存储和检索值的键不一致。

putExtra 方法接受键作为第一个参数,值作为第二个参数。 根据您写的内容,我假设“JOBID”是关键,但在 callEditActivity 您使用“TEST”作为关键。

确保您与此保持一致,并且一切都会就位。

用于设置额外的意图参数使用:

intentEditJob.putExtra("JOBID", "TEST");

要检索额外的意图参数,请使用:

String editJobID = intentExtras.getStringExtra("JOBID");   

【讨论】:

非常抱歉,我度过了漫长的一天 :)【参考方案2】:

首先为您的意图值创建一个静态最终字符串:

public static final string result = "result";

public void callEditActivity() 
    Intent intentEditJob = new Intent(context,ActivityJobEdit.class);
    intentEditJob.putExtra(result, "JOBID");
    context.startActivity(intentEditJob);

然后调用它:

Intent intentExtras = getIntent();
String editJobID = intentExtras.getStringExtra(previousClass.result);

【讨论】:

以上是关于如何从自定义 ListView 适配器传递 Intent Extra?的主要内容,如果未能解决你的问题,请参考以下文章

我缺少啥来启用从自定义适配器到 ListView 的详细信息传输?

从自定义 ListView 中的 TextView -w/Button 获取文本

从自定义适配器获取片段中的 UI 元素 ID

如何从自定义基础适配器中删除项目?

使用基本适配器解决方案从自定义列表中删除行视图

如何在 Swift 中将值从自定义单元格设置/传递到视图控制器