将活动重定向到另一个活动的动态方式 - android?

时间:2016-10-08 06:01:53

标签: android android-intent android-activity

我的应用有很多Adapter我正在使用setOnClickListener将一个活动重定向到另一个活动。

问题

在每个适配器中我应该写:

Intent intent = new Intent(activity.getApplicationContext(), another.class);
activity.startActivity(intent);

我可以使用动态方式从活动重定向到另一个活动(有时我需要在活动之间传输一些数据)。

最后

我只写一次并用于其他活动。

2 个答案:

答案 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);
        }
                }
            });