Android:使用适配器在活动之间传递参数

17 浏览
0 Comments

Android:使用适配器在活动之间传递参数

希望我能最好地解释我的情况。\n我有一个活动(A),基本上是一个表单,用于添加新项目,其中包含一些文本字段、时间和位置字段。\n当点击“设置位置”按钮时,它会调用第二个活动(B),该活动具有一个带有自定义ArrayAdapter的列表视图,用于提供位置的建议。当点击其中一个项目时(在适配器类内部的OnClickListener中),需要将其值传递回活动A。\n从活动A调用活动B:\n

Intent I = new Intent(getApplicationContext(), TaskGeoSetActivity.class);
startActivityForResult(I, LOC_ACTIVITY_CODE);

\n在活动B中设置适配器:\n

Adapter = new TaskGeoSubBaseAdapter(getApplicationContext(), R.id.sugtext, result);
Adapter.setActivity(TaskGeoSetActivity.this);
lv.setAdapter(Adapter);

\n适配器内的OnClick事件:\n

public void setActivity(Activity act) {
    parentAct = act;
}
private final OnClickListener locpicker = new OnClickListener() {
        @Override
        public void onClick(View v) {
            Address a = items.get((Integer) v.getTag());
            Intent intent = new Intent(context, TaskAddActivity.class);
            intent.putExtra("Address", a);
            parentAct.setResult(parentAct.RESULT_OK, intent);
        }
};

0
0 Comments

问题的出现原因:

在这个问题中,用户想要通过适配器(Adapter)将参数传递给ActivityB。但是,在适配器中,无法直接使用ActivityB的实例。

解决方法:

要在ActivityB中设置结果,不需要在适配器中使用Adapter.setActivity(TaskGeoSetActivity.this)。只需要使用this.setResult(parentAct.RESULT_OK, intent)来设置结果。

以下是整理后的文章:

在Android开发中,我们经常需要在不同的Activity之间传递参数。然而,在某些情况下,我们可能会遇到传递参数的问题。在这个问题中,用户想要通过适配器(Adapter)将参数传递给ActivityB。然而,他们在适配器中遇到了一些困难。

具体来说,用户在适配器的点击监听器(OnClickListener)中遇到了问题。他们尝试使用ActivityB的实例来设置结果,但是编译器提示“在范围内无法访问ActivityB的封闭实例”的错误。

解决这个问题的方法很简单。用户只需要在适配器的点击监听器中使用ActivityB.this来设置结果,而不是直接使用this。通过这样做,他们可以成功地将参数传递给ActivityB。

下面是解决问题的代码片段:

private final OnClickListener locpicker = new OnClickListener() {

public void onClick(View v) {

ActivityB.this.setResult(ActivityB.RESULT_OK, intent);

finish();

}

}

通过这种方式,用户可以轻松地在适配器中将参数传递给ActivityB,并成功设置结果。

在Android开发中,传递参数是一个常见的需求。然而,在使用适配器时,我们可能会遇到一些传递参数的问题。通过正确地使用Activity的实例,我们可以轻松地解决这些问题,并成功地将参数传递给目标Activity。

0
0 Comments

问题出现的原因:

问题是需要在适配器类中调用 setResult 函数,但是在适配器类中无法直接调用 setResult 函数。

解决方法:

可以通过以下步骤解决该问题:

1. 在适配器类中创建一个接口,用于将数据传递回活动 A。

2. 在活动 A 中实现该接口,并在接口的方法中调用 setResult 函数。

3. 在适配器类的构造函数中传递接口的实例。

4. 在适配器类中需要调用 setResult 函数的地方,通过接口实例调用接口的方法,将数据传递回活动 A。

具体实现代码如下:

在适配器类中定义接口:

public interface OnDataPassListener {

void onDataPass(Data data);

}

在活动 A 中实现接口:

public class ActivityA extends AppCompatActivity implements Adapter.OnDataPassListener {

// ...

@Override

public void onDataPass(Data data) {

// 调用 setResult 函数并传递数据

Intent intent = new Intent();

intent.putExtra("data", data);

setResult(RESULT_OK, intent);

}

}

在适配器类的构造函数中传递接口的实例:

public class Adapter extends RecyclerView.Adapter {

private OnDataPassListener onDataPassListener;

public Adapter(OnDataPassListener onDataPassListener) {

this.onDataPassListener = onDataPassListener;

}

// ...

}

在适配器类中需要调用 setResult 函数的地方,通过接口实例调用接口的方法:

public class Adapter extends RecyclerView.Adapter {

// ...

private void someMethod() {

// 调用接口的方法,将数据传递回活动 A

onDataPassListener.onDataPass(data);

}

}

以上就是解决在适配器类中无法直接调用 setResult 函数的方法。

0
0 Comments

在Android中,经常会遇到在不同的Activity之间传递参数的需求。在本文中,我们将讨论使用Adapter在Activity之间传递参数的问题。

首先,让我们来看一下问题的出现原因。在给定的代码中,我们可以看到一个点击事件的监听器locpicker被创建,并在点击事件发生时执行一些操作。在这个监听器中,我们通过调用getTag()方法获取被点击的View的标签,并利用这个标签从一个名为items的列表中获取相应的Address对象a。然后,我们创建一个新的Intent对象intent,并将这个Address对象作为额外的参数添加到这个Intent中。接下来,我们调用setResult()方法来设置返回结果为RESULT_OK,并将这个Intent作为返回数据。最后,我们调用finish()方法来关闭当前的Activity。

然而,这段代码缺少了一个重要的部分,即处理返回结果的逻辑。在调用startActivityForResult()方法启动另一个Activity时,我们需要在调用Activity的onActivityResult()方法来处理返回结果。在给定的代码中,我们可以看到在调用Activity的onActivityResult()方法时,我们使用了一个请求码OUR_REQUEST_CODE来判断返回结果的来源。如果返回结果的请求码与OUR_REQUEST_CODE相匹配,并且返回结果为RESULT_OK,那么我们可以在这个方法中执行一些有用的操作。

要解决这个问题,我们需要在调用Activity的onActivityResult()方法时,通过判断请求码和返回结果来处理返回结果。具体的解决方法如下所示:

首先,将点击事件的监听器替换为下面的代码:

private final OnClickListener locpicker = new OnClickListener() {
    public void onClick(View v) {
        Address a = items.get((Integer) v.getTag());
        Intent intent = new Intent(context, TaskAddActivity.class);
        intent.putExtra("Address", a);
        ((Activity)v.getContext()).setResult(parentAct.RESULT_OK, intent);
        ((Activity)v.getContext()).finish();
    }
}

然后,在调用Activity的onActivityResult()方法时,添加以下代码:

protected void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode){
        case OUR_REQUEST_CODE:
            if(resultCode == RESULT_OK) {
                //Do something useful with data
            }
            break;
    }
}

通过以上的解决方法,我们可以正确地在Adapter中传递参数,并在调用Activity的onActivityResult()方法中处理返回结果。

0