2016-10-08 3 views
1

У меня есть приложение, у которого много Adapter Я использую setOnClickListener для перенаправления из одной активности в другую.Динамический способ перенаправления деятельности на другую деятельность - Android?

Проблема:

В каждом адаптере я должен написать:

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

Могу ли я использовать с динамическим способом переадрессации от деятельности на другой вид деятельности (иногда мне нужно передать некоторые данные между деятельностью).

Наконец:

Я просто пишу один раз и использовать в других видах деятельности.

+1

** Wrap код намерения в функции ** затем вызвать когда вам нужно воссоздать код намерения – Anish

+0

иногда мне нужно перенести некоторые данные между действиями. –

+0

Вы можете передавать данные в массив или как строку в параметр функции – Anish

ответ

3

Это обычная проблема, если у вас много мероприятий. Я решил его с помощью одноэлементного 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"); 

Помните, когда вы хотите поймать связанные данные p reviously послал, вам необходимо добавить следующий код в получателе деятельности onCreate():

Bundle extras = getIntent().getExtras(); 
mData = extras.getString("DATA"); 
// process the data after we receive it. 

Примечание:

Если мне не изменяет память, я предполагаю, что это небольшое изменение, которое я делаю из Navigator class от Android-CleanArchitecture, хотя без injection.

+1

В одном классе у меня есть только данные для прохода и еще несколько данных (int, string, boolean) и т. Д. Как я могу управлять им (контекст контекста, данные String) –

+1

Это просто, вам нужно только добавить другой метод вроде: 'public void navigateToSubActivity (контекст контекста, данные String, String otherData)' –

+0

это должно быть приемлемым answer.nice объяснением. –

0

я надеюсь, что этот код поможет вам

в классе адаптера

private OnStatusChangeListener onStatusChangeListener; 

    public void setOnStatusChangeListener(final OnStatusChangeListener onCartChangeListener) { 
      this.onStatusChangeListener = onCartChangeListener; 
    } 

    public interface OnStatusChangeListener { 
      public void onStatusChange(int position); 
    } 

в классе активность

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); 
     } 
       } 
      }); 
Смежные вопросы