[英]Save fragment changes in navigation drawer
我目前正在開發一個Android應用,該應用使用帶有片段的導航抽屜,每個片段都包含ImageButtons。 用戶可以更改這些ImageButton的背景圖像。
但是,當我進行更改時,切換到另一個片段,然后再切換回初始片段,更改將被重置(ImageButton背景被重置為默認值)。
我知道,當前代碼每次選擇都會重新創建該片段。 如何在離開碎片的狀態下簡單地重新打開碎片?
PS。 即使關閉並重新打開應用程序,仍然可以保存這些更改的解決方案會很棒。 謝謝!
這是我的主要抽屜活動方法:
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
android.app.FragmentManager fragmentManager = getFragmentManager();
if (id == R.id.nav_agni) {
fragmentManager.beginTransaction().replace(R.id.content_frame, new FragmentAgni()).commit();
} else if (id == R.id.nav_ah_muzen_cab) {
fragmentManager.beginTransaction().replace(R.id.content_frame, new FragmentAhMuzenCab()).commit();
} else if (id == R.id.nav_ah_puch) {
fragmentManager.beginTransaction().replace(R.id.content_frame, new FragmentAhPuch()).commit();
} else if (id == R.id.nav_amaterasu) {
fragmentManager.beginTransaction().replace(R.id.content_frame, new FragmentAmaterasu()).commit();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
這是我的片段之一(它們幾乎相同):
public class FragmentAhMuzenCab extends Fragment {
View myView;
public FragmentAhMuzenCab() {
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
myView = inflater.inflate(R.layout.god_ah_muzen_cab, container, false);
//ImageButtons
//Starter Item + Relics
final ImageButton starter = (ImageButton) myView.findViewById(R.id.imageStarterItem);
final ImageButton relic1 = (ImageButton) myView.findViewById(R.id.imageRelic1);
final ImageButton relic2 = (ImageButton) myView.findViewById(R.id.imageRelic2);
//Full Build
final ImageButton item1 = (ImageButton) myView.findViewById(R.id.imageItem1);
final ImageButton item2 = (ImageButton) myView.findViewById(R.id.imageItem2);
final ImageButton item3 = (ImageButton) myView.findViewById(R.id.imageItem3);
final ImageButton item4 = (ImageButton) myView.findViewById(R.id.imageItem4);
final ImageButton item5 = (ImageButton) myView.findViewById(R.id.imageItem5);
final ImageButton item6 = (ImageButton) myView.findViewById(R.id.imageItem6);
starter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
ItemPhysStarterFragment dialog = ItemPhysStarterFragment.newInstance();
dialog.setOnListItemSelectedListener(new ItemPhysStarterFragment.OnListItemClickedListener() {
public void onListItemClick(int resourceId) {
starter.setImageResource(resourceId);
}
});
dialog.show(getFragmentManager(), "starterDialog");
}
});
relic1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
ItemRelicFragment dialog = ItemRelicFragment.newInstance();
dialog.setOnListItemSelectedListener(new ItemRelicFragment.OnListItemClickedListener() {
public void onListItemClick(int resourceId) {
relic1.setImageResource(resourceId);
}
});
dialog.show(getFragmentManager(), "relic1Dialog");
}
});
relic2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
ItemRelicFragment dialog = ItemRelicFragment.newInstance();
dialog.setOnListItemSelectedListener(new ItemRelicFragment.OnListItemClickedListener() {
public void onListItemClick(int resourceId) {
relic2.setImageResource(resourceId);
}
});
dialog.show(getFragmentManager(), "relic2Dialog");
}
});
item1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
ItemPhysFragment dialog = ItemPhysFragment.newInstance();
dialog.setOnListItemSelectedListener(new ItemPhysFragment.OnListItemClickedListener() {
public void onListItemClick(int resourceId) {
item1.setImageResource(resourceId);
}
});
dialog.show(getFragmentManager(), "item1Dialog");
}
});
item2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
ItemPhysFragment dialog = ItemPhysFragment.newInstance();
dialog.setOnListItemSelectedListener(new ItemPhysFragment.OnListItemClickedListener() {
public void onListItemClick(int resourceId) {
item2.setImageResource(resourceId);
}
});
dialog.show(getFragmentManager(), "item2Dialog");
}
});
item3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
ItemPhysFragment dialog = ItemPhysFragment.newInstance();
dialog.setOnListItemSelectedListener(new ItemPhysFragment.OnListItemClickedListener() {
public void onListItemClick(int resourceId) {
item3.setImageResource(resourceId);
}
});
dialog.show(getFragmentManager(), "item3Dialog");
}
});
item4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
ItemPhysFragment dialog = ItemPhysFragment.newInstance();
dialog.setOnListItemSelectedListener(new ItemPhysFragment.OnListItemClickedListener() {
public void onListItemClick(int resourceId) {
item4.setImageResource(resourceId);
}
});
dialog.show(getFragmentManager(), "item4Dialog");
}
});
item5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
ItemPhysFragment dialog = ItemPhysFragment.newInstance();
dialog.setOnListItemSelectedListener(new ItemPhysFragment.OnListItemClickedListener() {
public void onListItemClick(int resourceId) {
item5.setImageResource(resourceId);
}
});
dialog.show(getFragmentManager(), "item5Dialog");
}
});
item6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
ItemPhysFragment dialog = ItemPhysFragment.newInstance();
dialog.setOnListItemSelectedListener(new ItemPhysFragment.OnListItemClickedListener() {
public void onListItemClick(int resourceId) {
item6.setImageResource(resourceId);
}
});
dialog.show(getFragmentManager(), "item6Dialog");
}
});
return myView;
}
}
是的,片段已重新創建,建議您將圖像的資源ID存儲在SharedPreferences中:
starter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
ItemPhysStarterFragment dialog = ItemPhysStarterFragment.newInstance();
dialog.setOnListItemSelectedListener(new ItemPhysStarterFragment.OnListItemClickedListener() {
public void onListItemClick(int resourceId) {
...store the resourceId for this image in the Shared Preferences
starter.setImageResource(resourceId);
}
});
dialog.show(getFragmentManager(), "starterDialog");
}
});
然后在您的Fragment的onCreate中,您可以執行以下操作:
starter.setImageResource(...get resource id from shared prefs);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.