2016-10-08 70 views
1

我有一個應用程序,有很多Adapter我正在使用setOnClickListener重定向從一個活動到另一個活動。重定向活動到另一個活動的動態方式 - android?

問題

在每個適配器我應該寫:

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

我可以從一個動態的方式使用重定向從活動到另一個活動(有時我需要傳遞活動之間的一些數據)。

最後

我只寫一次,在其他活動中使用。

+1

**總結你的意圖的代碼在一個函數**然後調用功能,您需要重新創建意圖代碼 – Anish

+0

有時我需要在活動之間傳輸一些數據。 –

+0

您可以將數據傳遞給數組或作爲字符串傳遞給函數的參數 – Anish

回答

3

如果您有很多活動,這是一個常見問題。我解決它通過使用單導航類是這樣的:在每一個活動

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 from​​雖然沒有injection

+1

在一個類中,我剛剛在傳遞數據和另一個多個數據(int,string,boolean)等等...我如何管理它(上下文上下文,字符串數據) –

+1

這很簡單,你只需要添加另一種方法是:'public void navigateToSubActivity(Context context,String data,String anotherData)' –

+0

這應該是可以接受的answer.nice解釋。 –

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); 
     } 
       } 
      }); 
相關問題