我的应用有很多Adapter
我正在使用setOnClickListener
将一个活动重定向到另一个活动。
问题:
在每个适配器中我应该写:
Intent intent = new Intent(activity.getApplicationContext(), another.class);
activity.startActivity(intent);
我可以使用动态方式从活动重定向到另一个活动(有时我需要在活动之间传输一些数据)。
最后:
我只写一次并用于其他活动。
答案 0 :(得分:2)
如果您有许多活动,这是一个常见问题。我通过使用像这样的单例 Navigator 类来解决它:
public class Navigator {
private static Navigator instance;
private Navigator() {
}
public static Navigator getInstance() {
if (instance == null) {
synchronized (Navigator.class) {
if (instance == null) {
instance = new Navigator();
}
}
}
return instance;
}
public void navigateToSubActivity(Context context, String data) {
Intent subAct = SubActivity.getCallingIntent(context);
// This is the data where you want to send to target activity.
subAct.putExtra("DATA", data);
context.startActivity(subAct);
}
}
然后在每个活动中你应该添加静态方法(这里是SubActivity
类的例子):
/**
* Returns the intent for this activity
*
* @param context {@link Context}
* @return {@link Intent}
*/
public static Intent getCallingIntent(Context context) {
return new Intent(context, SubActivity.class);
}
最后,您可以使用以下方式愉快地导航到另一个活动:
Navigator.getInstance().navigateToSubActivity(this, "my data");
请记住,当您想要捕获先前发送的捆绑数据时,您需要在收件人活动onCreate()
中添加以下代码:
Bundle extras = getIntent().getExtras();
mData = extras.getString("DATA");
// process the data after we receive it.
注意:
如果我的回忆对我有用,我想这是我Navigator class来自Android-CleanArchitecture的一点点修改,但没有injection
。
答案 1 :(得分:0)
我希望此代码可以帮助您
适配器类中的
private OnStatusChangeListener onStatusChangeListener;
public void setOnStatusChangeListener(final OnStatusChangeListener onCartChangeListener) {
this.onStatusChangeListener = onCartChangeListener;
}
public interface OnStatusChangeListener {
public void onStatusChange(int position);
}
在您的Activity类
中 yourAdapter.setOnStatusChangeListener(new yourAdapter.OnStatusChangeListener() {
@Override
public void onStatusChange(int position) {
//Do here what you pass data or anything beetween two activity or fragments
Intent intent = new Intent(getApplicationContext(), DisplayActivity.class);
//Create a bundle object
Bundle b = new Bundle();
//Inserts a String value into the mapping of this Bundle
b.putString("name", name.getText().toString());
b.putString("age", age.getText().toString());
int id = genderRadioGroup.getCheckedRadioButtonId();
RadioButton radioButton = (RadioButton) findViewById(id);
b.putString("gender", radioButton.getText().toString());
//Add the bundle to the intent.
intent.putExtras(b);
//start the DisplayActivity
startActivity(intent);
}
}
});