Intent 问题:如何使用来自另一个 class "Adapter" 的 MainActivity 将数据传递给 SecondActivity

Intent problem: how to use MainActivity from another class "Adapter" to pass data to SecondActivity

这是在Adapter.Java

    public void onClick(View v) {
        String name=listItemData.get(i).getName();
        Intent intent = Intent(MainActivity.this, SecondActivity.class);
        intent.putExtra("NAME", name);
    }

我现在知道当我不在 MainActivity 中时如何使用 MainActivity.this class..

您可以在 Adapter class(例如 private Activity mActivity;)中使用 Activity 类型的成员变量,并在构造函数中将 MainActivity 实例传递给 Adapter class您的适配器 class 并将其分配给 mActivity。像这样的事情:

public Adapter(Activity activity) {
    this.mActivity = activity;
}

然后在您的 onClick 方法中:

public void onClick(View v) {
    String name=listItemData.get(i).getName();
    Intent intent = new Intent(mActivity, SecondActivity.class);
    intent.putExtra("NAME", name);
    mActivity.startActivity(intent);
}

试试下面的代码。

解决方案 1

MainActivity 中初始化 Adapter 时必须传递 context

MainActivity.this中:

XyzAdapter adapter = new XyzAdapter(MainActivity.this, .. ..)

在你的 Adapter:

private Context mContext;
   public XyzAdapter(Context context .. ..){
      mContext = context;
   }

然后你可以像下面那样做:

public void onClick(View v) {
        String name=listItemData.get(i).getName();
        Intent intent = Intent(mContext, SecondActivity.class);
        intent.putExtra("NAME", name);
        mContext.startActivity(intent);
    }

解决方案 2

另一种选择是interface

创建一个 interface 如下所示:

public interface AdapterInterface {
        public void buttonPressed();
    }

现在在您的适配器中:

AdapterInterface buttonListener;
public XyzAdapter(Context context, AdapterInterface buttonListener)
{
  super(context,c,flags);
  this.buttonListener = buttonListener;
}

public void onClick(View v) {
      buttonListener.buttonPressed()
}

在你的 Activity:

AdapterInterface buttonListener;
public MainActivity extends AppCompactActivity implements AdapterInterface{

onCreate

buttonListener = this;

XyzAdapter adapter = new XyzAdapter(MainActivity.this, buttonListener  .. ..)



@Override
public void buttonPressed(){
  // here you have to do once your click perform
}