Фрагмент Android против группы действий
Привет, ребята, я работаю над приложением для Android, где я хочу создать группу действий для каждой вкладки. Но так как Activity Group устарела, я должен использовать фрагменты. Я погуглил последние дни и провел некоторое исследование на эту тему, но до сих пор не понимаю. На рисунке ниже показано, что я хочу сделать. Также я иду прямо из iOS, и мне нужны отзывы о моих теориях.
Как видите, каждый фрагмент состоит из фрагмента WebView. Когда пользователь щелкает ссылку в этом фрагменте WebView - запрос перехватывается и заменяется новый фрагмент, который снова содержит WebView и загружает ссылку, которая была нажата в предыдущем фрагменте. В какой-то момент пользователь решает вернуться к первому фрагменту и нажимает кнопку возврата.
Фрагменты должны выскочить из стека в обратном порядке, пока он снова не увидит первый. В идеале каждый фрагмент должен сохранять свое состояние экземпляра, чтобы при возврате пользователя WebView не нужно было снова загружать сайт.
Я натолкнулся на ActionBar Sherlock, который представляет пример вкладок "Фрагменты". Существует также пример стека фрагментов. Было бы идеально объединить эти два примера, чтобы каждая вкладка состояла из стека фрагментов.
Мои структуры кода выглядят следующим образом:
Мой фрагмент TabHost
public class MyActivity extends SherlockFragmentActivity {
static TabHost mTabHost;
static TabManager mTabManager;
public static int THEME = R.style.Theme_Sherlock_Light;
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(THEME); //Used for theme switching in samples
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_tabs);
mTabHost = (TabHost)findViewById(android.R.id.tabhost);
mTabHost.setup();
mTabManager = new TabManager(this, mTabHost, R.id.myRealTabContent);
// adding some Fragment Tabs
mTabManager.addTab(mTabHost.newTabSpec(tabNames[i]).setIndicator(tabNames[i]),
FragmentStackSupport.CountingFragment.class, bundle);
if (savedInstanceState != null) {
mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab"));
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("tab", mTabHost.getCurrentTabTag());
}
// defining the Tab Manager
Как будет выглядеть стек фрагментов для каждой вкладки? В настоящее время у меня есть фрагмент деятельности с фрагментом внутри каждой вкладки. Но я не достигаю той логики, которая мне нужна.
Вот мой код: Мой фрагмент с WebView внутри
Я был бы рад за некоторые отзывы и советы (или есть какие-либо примеры в Интернете?). У меня также есть некоторые опасения по поводу памяти - когда пользователь щелкает, щелкает и щелкает, и память должна удерживать каждый фрагмент в стеке.
Приветствия.
1 ответ
Я не могу придумать много веских причин для создания нового фрагмента каждый раз, когда пользователь нажимает на ссылку. Есть ли причина, по которой вы пытаетесь это сделать? Если вы просто возвращаете false из shouldOverrideUrlLoading() вместо создания нового фрагмента, WebView загрузит новую страницу, и если вы захотите вернуться назад, вы можете использовать методы canGoBack() и goBack(). Для обработки нажатий кнопок назад вы можете переопределить onKeyDown в своей деятельности и сделать что-то вроде:
if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack() {
myWebView.goBack();
return true;
}