1

私のフラグメントに2つの異なるビューのデータリストがあります。私のデフォルトビューはListviewで、もう1つはGridviewです。私はこの2つのビューをツールバーのアイコンをクリックして切り替えます。 そして、私はこのようなonOptionsItemSelectedメソッド内で動的に切り替えアイテムのアイコンを設定します。optionMenuアイテムアイコンを共有プリファレンスに保存

//global variables 
private int currentViewMode = 0 ; 
static final int VIEW_MODE_LISTVIEW = 0; 
static final int VIEW_MODE_GRIDVIEW = 1; 
. 
. 
. 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.switchView: 
      if (VIEW_MODE_LISTVIEW == currentViewMode){ 
       item.setIcon(R.mipmap.ic_gridview); 
       currentViewMode = VIEW_MODE_GRIDVIEW; 
      }else { 
       item.setIcon(R.mipmap.ic_listview); 
       currentViewMode = VIEW_MODE_LISTVIEW; 
      } 
      switchView(); 
      SharedPreferences sharedPreferences = activity.getSharedPreferences("ViewMode",currentViewMode); 
      SharedPreferences.Editor editor = sharedPreferences.edit(); 
      editor.putInt("currentViewMode",currentViewMode); 
      editor.commit(); 
      return false; 

     default: 
      break; 
    } 
    return super.onOptionsItemSelected(item); 
} 

そして、私はこのような共有環境設定から私のビューを取得:

SharedPreferences sharedPreferences = activity.getSharedPreferences("ViewMode",activity.MODE_PRIVATE); 
currentViewMode = sharedPreferences.getInt("currentViewMode",VIEW_MODE_LISTVIEW); 

しかし、私は保存することができますかわかりませんアイテムアイコンとそれを取得する方法を示します。

お願いします。あなたのGridViewのためのあなたのメニューXML内の別の項目を追加することができます

メニュー

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

<item 
    android:id="@+id/switchView" 
    android:title="" 
    android:icon="@mipmap/ic_listview" 
    app:showAsAction="always"/> 

</menu> 
+0

setHasOptionsMenu(true);に持っています。 currentViewModeを正しく使用して、アセットからロードするアイコンを決定します。 –

答えて

3

。この2つの項目の可視性を担うブール値を作成します。 listviewに切り替えると、gridItemの可視性をfalseに設定し、gridviewの場合はlistItemをfalseに設定できます。この場合、共有設定でこの可視性をブール値として保存して取得できます。

は、このようにコードを変更し

<item 
    android:id="@+id/switchListView" 
    android:title="" 
    android:icon="@mipmap/ic_listview" 
    app:showAsAction="always"/> 

<item 
    android:id="@+id/switchGridView" 
    android:title="" 
    android:icon="@mipmap/ic_gridview" 
    android:visible="false" 
    app:showAsAction="always"/> 

をごフラグメント内部:

boolean isGridView; 

その後:

SharedPreferences myPrefs = PreferenceManager.getDefaultSharedPreferences(activity); 
isGridView = myPrefs.getBoolean("menu_item", false); 

そして最後には、このようなあなたのonOptionItemSelected方法を変更します。

フラグメント内のオプションメニューを実装する方法を知らない人のために

重要な注意

実際に、2冊のノートがここにあります

1.あなたが実装している場合mainActivity内のoptionMenuを使用すると、MainActivityのonOptionsItemSelectedにreturn falseが含まれている必要があります。そうしないと、フラグメントのoptionMenuは機能しません。

@Override 
public boolean onOptionsItemSelected(MenuItem item){ 
    switch (item.getItemId()) { 
     // 
    } 
    return false; 
} 

2.あなたはあなたが簡単にSharedPreferencesに画像を保存することはできませんあなたのあなたのフラグメントでonCreate

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
} 
関連する問題