我是Android的新手,第一步是构建一个应用程序,以便在手机中运行,并在其中放置两个片段。第一个片段具有应该代表文章标题的项目的回收者视图。当我单击一个时,第二个片段将打开并显示文章的标题(在文本视图中)和内容(在另一文本视图中)(为简单起见,我将文章标题作为假标题,有一个设置,该设置不会显示内容,但也会在内容文本视图中显示标题。
我要保存回收站视图的滚动位置。
当我向下滚动时,在屏幕顶部具有与第一个标题不同的文章标题,我选择了一个文章,然后打开第二个带有所需内容的片段,这没关系。当我旋转到风景时,相同的片段包含相同的内容,好的。所以:
1)当我从横向按下后退按钮,返回到第一个片段时,对回收者视图的设置相同,确定;
2)当我再次旋转至肖像时,保留在第二个片段上,也可以。现在,如果按“后退”按钮返回到第一个片段,回到文章列表,则回收站视图未设置为从最初滚动到的项目开始。我该怎么办?
我在第一个片段中有这段代码,其中包含回收者视图:
@Override
public void onSaveInstanceState(Bundle state) {
int lastFirstVisiblePosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
state.putInt(Articles.RECYCLER_POSITION_KEY, lastFirstVisiblePosition);
super.onSaveInstanceState(state);
}
@Override
public void onActivityCreated(Bundle state) {
super.onActivityCreated(state);
if (state != null) {
int lastFirstVisiblePosition = state.getInt(Articles.RECYCLER_POSITION_KEY);
((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPosition(lastFirstVisiblePosition);
}
}
我想念什么?谢谢。
[ EDIT ]在我的听众中是这样,用于调用第二个片段:
ArticleReaderFrag newFragment = new ArticleReaderFrag();
Bundle args = new Bundle();
args.putString(NEW_FRAG_TITLE_KEY, item);
args.putString(NEW_FRAG_BODY_KEY, itemb);
newFragment.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.main_activity, newFragment);
transaction.addToBackStack(null);
transaction.commit();
答案 0 :(得分:0)
首次启动活动时,创建一个Fragment的新实例,并使用TAG将其保存到FragmentManager。方向更改后重新创建活动时。使用标签检索旧实例。
这是您应该在活动中使用的示例代码。
System.out.println(user.getAddress.getAddressLineOne);
System.out.println(user.getAddress.getCity);
默认情况下会发生这种情况。阅读此answer了解更多详细信息。
编辑
我相信这是您的方法
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.first_activity);
fragmentManager = getSupportFragmentManager();
if(savedInstanceState==null) {
userFragment = UserNameFragment.newInstance();
fragmentManager.beginTransaction().add(R.id.profile, userFragment, "TAG").commit();
}
else {
userFragment = fragmentManager.findFragmentByTag("TAG");
}
}
保存旋转位置,并使用该位置加载特定片段。
更改方向后重新创建活动时调用方法
public createSecondFragment(int position){
ArticleReaderFrag newFragment = new ArticleReaderFrag();
Bundle args = new Bundle();
args.putString(NEW_FRAG_TITLE_KEY, item);
args.putString(NEW_FRAG_BODY_KEY, itemb);
newFragment.setArguments(args);
FragmentTransaction transaction =
getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.main_activity, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}