2014-12-07 58 views
0

我有一個Activity(ActivityMain)和一些片段的應用程序。 NavigationDrawer控制片段的切換。在某些片段中,用戶有機會在不打開NavigationDrawer的情況下切換到另一個片段(例如,單擊按鈕)。從另一個片段更改NavigationDrawer selectedItem

如果我使用NavigationDrawer在片段之間切換,但是如果我使用片段內的控件(例如按鈕)切換到另一個片段,我無法設置NavigationDraver的selectedItem屬性(實際上是a ND中的ListView)selectedItem屬性。

NavigationDrawer的selectedItem屬性與sharedPreferences一起存儲,並在NavigationDrawer片段中的onDrawerOpened方法中恢復。

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition); 
} 

我試圖把觀STATE_SELECTED_POSITION值的onclick事件中選擇指標,如下,但並不奏效。我也無法從其他片段中的sharedPreferences中獲得值。

public void navigationRowClick(View view) { 

     SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity()); 

     switch(view.getId()) { 
     case R.id.tr_conv: 
      sp.edit().putInt(STATE_SELECTED_POSITION, 1); 
      ((MainActivity)getActivity()).changeFrame(1); 
      ((MainActivity)getActivity()).restoreActionBar(); 
      break; 
     case R.id.trCalc: 
      sp.edit().putInt(STATE_SELECTED_POSITION, 2); 
      ((MainActivity)getActivity()).changeFrame(2); 
      ((MainActivity)getActivity()).restoreActionBar(); 
      break; 
     case R.id.trCalo: 
      Integer i = sp.getInt(STATE_SELECTED_POSITION, 100); // get value test 
      String s = i.toString(); 
      Toast.makeText(getActivity(), s, Toast.LENGTH_SHORT).show(); 
      break; 
     } 
    } 

我的問題是,我應該如何設置另一個片段的NavigationDrawer selectedItem?你有這個任務的最佳做法嗎?

非常感謝您的建議。

在onclick事件切換碎片按鈕
+0

在切換片段的按鈕的onClick事件中放置了outState.putInt(STATE_SELECTED_POSITION,position);該位置應該是該片段在ND – 2014-12-07 19:14:19

+0

謝謝您的建議,Goran。不幸的是,建議的解決方案無效。也許我沒有用正確的方式使用SharedPreferences。我編輯了我的帖子。 – Seba 2014-12-07 22:54:04

回答

1

button.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
     ((MainActivity) getActivity()).changePosition(1); 
     sp.edit().putInt(STATE_SELECTED_POSITION, 1).**commit()**; 
    } 
}); 

//in MainActivity.java 
private void changePosition(int position) 
{ 
    list.setItemChecked(position, true); 
} 

這個作品,如果你已經設置了android:choiceMode =「singleChoice」屬性列表。

做事的另一種方法是做在ListView的適配器:

..... 
{ 
    private int mSelectedItem = 0; 

    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     if(position == mSelectedItem) 
     { 

     } 
     else 
     { 

     } 
    } 

    public void setSelectedItem(int position) 
    { 
     mSelectedItem = position; 
    } 
} 


//in MainActivity.java 
private void changePosition(int position) 
{ 
    adapter.setSelectedItem(position); 
    adapter.notifyDataSetChanged(); 
} 

還要確保將更改提交到SharedPreferences:

sp.edit().putInt(STATE_SELECTED_POSITION, 1).**commit()**; 

也許你正在做它在其他地方,但我沒有看到你所顯示的片段。

+0

謝謝@Goran。隨着您的寶貴意見,我找到了工作解決方案。我需要將更改提交給SharedPreferences。在NavigationDrawer的onDrawerStateChanged方法中,我讀回STATE_SELECTED_POSITION值,並設置檢查相關列表項的狀態。 – Seba 2014-12-08 21:56:09

相關問題