2013-05-22 60 views
0

我想從一個意圖傳遞user_id值到另一個意圖。我知道這是非常直接的過程,我已經做了好幾次。但是用下面的代碼,我有點混淆。將數據從一個意圖傳遞到另一個意圖android

我需要將來自MainActivity類的user_id值傳遞給MenuFragment類。而在代碼中的實際流量是喜歡這 -

MainActivity will call MenuActivity and MenuActivity will call MenuFragment

因此,這意味着,我需要傳遞值USER_ID從MainActivity到MenuActivity,然後從MenuActivity到MenuFragment。我對嗎?

如果是,我能夠將MainActivity類的user_id值傳遞給MenuActivity類,但我不知道如何將相同的user_id值從MenuActivity類傳遞給MenuFragment類。由於我調用MenuFragment類的方式稍有不同,所以我不確定在這種情況下如何做到這一點。

任何人都可以幫助我嗎?

下面是在MainActivity類

public class MainActivity extends MapActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    Bundle bundle = getIntent().getExtras(); 
    user_id = bundle.getString("USERID"); 

    setContentView(R.layout.sample); 

    findViewById(R.id.sample_button).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources() 
      .getDisplayMetrics()); 
     SlideoutActivity.prepare(MainActivity.this, R.id.inner_content, width); 

     Bundle bundle = new Bundle(); 
     bundle.putString("USERID", user_id); 
     Intent thesisProject = new Intent(MainActivity.this, MenuActivity.class); 
     thesisProject.putExtras(bundle); 
     startActivity(thesisProject); 

     overridePendingTransition(0, 0); 
     } 
    }); 
    } 
    } 

下面是MenuActivity類

public class MenuActivity extends FragmentActivity { 

    private SlideoutHelper mSlideoutHelper; 
    private String user_id; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     Bundle bundle = getIntent().getExtras(); 
     user_id = bundle.getString("USERID"); 

     mSlideoutHelper = new SlideoutHelper(this); 
     mSlideoutHelper.activate(); 
     getSupportFragmentManager().beginTransaction().add(com.korovyansk.android.slideout.R.id.slideout_placeholder, new MenuFragment(), "menu").commit(); 
     mSlideoutHelper.open(); 
    } 

    .... 

} 

而且下面是MenuFragment類

public class MenuFragment extends ListFragment { 

    private String user_id; 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, new String[] { " Settings", " Attributes"})); 
     getListView().setCacheColorHint(0); 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 

     //get selected items 
     String selectedValue = (String) getListAdapter().getItem(position); 

     if(selectedValue.equals(" Attributes")) { 
      Bundle bundle = new Bundle(); 
      bundle.putString("USERID", user_id); 
      Intent thesisProject = new Intent(getActivity(), MatchingInterest.class); 
      thesisProject.putExtras(bundle); 

      startActivity(thesisProject); 
     } 
    } 
} 
+0

你見過嗎? http://stackoverflow.com/questions/9245408/best-practice-for-instantiating-a-new-android-fragment – NyanLH

回答

1
@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    user_id = getActivity().getIntent().bundle.getString("USERID"); 
} 

只需追加getActivity()函數b之前使用getIntent()在你的片段。

0

新MenuFragment()將調用MenuFragment的構造函數,因此內MenuFragment有一個構造

MenuFragment(String uid) 
{ 
    this.user_id=uid; 
} 

,並更換新MenuFragment()新MenuFragment(USER_ID)

+0

這是非常糟糕的主意。片段被破壞並重新創建後,您將不會擁有此值。改用'setArguments'。 –

相關問題