gpt4 book ai didi

Android Swipe Tab Action Bar - 使选项卡中的更改持久化

转载 作者:行者123 更新时间:2023-11-29 01:44:59 25 4
gpt4 key购买 nike

我现在使用 3 个选项卡,我可以很好地在它们之间切换。但是,假设我在第一个选项卡中进行了一些更改(在 TextView 中输入内容),然后转到第三个选项卡然后返回,更改消失了。这似乎很明显,因为在我的代码中,我根据我的 xml 布局文件设置 TabFragment 的选项卡布局。当我们滑动到不同的选项卡时,有没有办法保存选项卡的布局,以便稍后切换回这个已保存的选项卡布局?

(我观察到的一件有趣的事情是,当我在前两个选项卡之间切换时,更改会保持不变,但每当我转到第三个选项卡并返回到第一个选项卡时,它们就会消失)

我的主要 Activity 文件(我从 this answer 得到代码)

public class Tob extends FragmentActivity implements ActionBar.TabListener 
{

CollectionPagerAdapter mCollectionPagerAdapter;
ViewPager mViewPager;

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mCollectionPagerAdapter = new CollectionPagerAdapter(getSupportFragmentManager());

final ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mCollectionPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener()
{
@Override

public void onPageSelected(int position)
{
actionBar.setSelectedNavigationItem(position);
}

});
for (int i = 0; i < mCollectionPagerAdapter.getCount(); i++)
{
actionBar.addTab(actionBar.newTab()
.setText(mCollectionPagerAdapter.getPageTitle(i))
.setTabListener(this));
}

}

public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction)
{
}

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction)
{
mViewPager.setCurrentItem(tab.getPosition());
}

public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction)
{

}

public class CollectionPagerAdapter extends FragmentPagerAdapter
{
final int NUM_ITEMS = 3; // number of tabs

public CollectionPagerAdapter(FragmentManager fm)
{
super(fm);
}

@Override

public Fragment getItem(int i)
{
Fragment fragment = new TabFragment();
Bundle args = new Bundle();
args.putInt(TabFragment.ARG_OBJECT, i);
fragment.setArguments(args);
return fragment;
}

@Override
public int getCount()
{
return NUM_ITEMS;
}

@Override
public CharSequence getPageTitle(int position)
{
String tabLabel = null;
switch (position) {
case 0:
tabLabel = "Tab1";
break;
case 1:
tabLabel = "Tab2";
break;
case 2:
tabLabel = "Tab3";
break;

}

return tabLabel;
}
}

public static class TabFragment extends Fragment
{
public static final String ARG_OBJECT = "object";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{

Bundle args = getArguments();
int position = args.getInt(ARG_OBJECT);
int tabLayout = 0;
switch (position)
{
case 0:
tabLayout = R.layout.tob1;
break;
case 1:
tabLayout = R.layout.tob2;
break;
case 2:
tabLayout = R.layout.tob3;
break;
}

View rootView = inflater.inflate(tabLayout, container, false);
return rootView;

}

}

我的 activity_main.xml 文件:

<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Tob"/>

tob1.xml 文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/tab1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/apppattern"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

等等。我的预感是我需要在切换时保存选项卡的布局,我只是不确定在哪里做。

最佳答案

交叉发布:saving data on tabs

您可以使用共享首选项从选项卡中存储和检索用户输入/字符串/数字等。

首先,在您的类中声明一个 SharedPreference 名称标签。

public static final String PREFS_NAME = "Blah";

接下来,在您的 onTabUnselected 方法中,将所有与表单相关的文本数据保存到 SharedPreference 中。

public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) 
{
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("userText", (TextView)getViewById(R.id.myTextView).getText());
editor.commit();
}

最后,在 onTabSelected 方法中获取 SharedPreference 文本。

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) 
{
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
String myText = settings.getString("userText", "Default");
((TextView)getViewById(R.id.myTextView)).setText(myText);
}

这是原始的 Android 文档页面 http://developer.android.com/guide/topics/data/data-storage.html您可以使用 SharedPreferences 保存字符串、 float 、 bool 值等原语。您还可以为布局/图像等其他资源保存 url 字符串,然后检索它们并在 tab1 中动态创建您的 View 。

关于Android Swipe Tab Action Bar - 使选项卡中的更改持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22023915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com