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
}
这是在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
}