Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android listfragment滚动到顶部_Java_Android_Android Fragments_Fragment_Android Listfragment - Fatal编程技术网

Java Android listfragment滚动到顶部

Java Android listfragment滚动到顶部,java,android,android-fragments,fragment,android-listfragment,Java,Android,Android Fragments,Fragment,Android Listfragment,我有一个列表片段 当用户单击列表项时,我用一个新闻片段替换列表片段。 当用户返回时(使用addToBackStack),列表将滚动到顶部 当用户按下列表项时,我希望我的列表保持在相同的滚动级别。这可能吗?我如何获得此结果 这是我替换列表片段的代码: myFragment myFragment = new myFragment(); myFragment.setArguments(bundle); FragmentTransaction ft = getA

我有一个列表片段

当用户单击列表项时,我用一个新闻片段替换列表片段。 当用户返回时(使用
addToBackStack
),列表将滚动到顶部

当用户按下列表项时,我希望我的列表保持在相同的滚动级别。这可能吗?我如何获得此结果

这是我替换列表片段的代码:

myFragment myFragment = new myFragment();

    myFragment.setArguments(bundle);
                FragmentTransaction ft = getActivity().getSupportFragmentManager()
                        .beginTransaction();
                ft.replace(R.id.phone_container, myFragment);
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                ft.addToBackStack(null);
                ft.commit();
我尝试过类似的方法,但没有结果:

public void onResume() {
    super.onResume();
    Log.i("log", "onResume()");

      setListAdapter(adapter);
      if(index!=-1){
         this.getListView().setSelectionFromTop(index, top);
      }
}

public void onPause() {
    super.onPause();
    Log.i("log", "onPause()");
    try {
        index = this.getListView().getFirstVisiblePosition();
        View v = this.getListView().getChildAt(0);
        top = (v == null) ? 0 : v.getTop();
    } catch (Throwable t) {
        t.printStackTrace();
    }
}

从视图层次结构中删除片段时,实际上是销毁了视图,而不是片段。因此,当它重新连接时,它再次调用onCreateView。这就是为什么您的列表再次在顶部滚动

保存状态的方法是将其存储在实例变量中,然后再次使用onCreateView滚动到最后一个位置,就像您的代码那样(当然,在适配器填充之后)

这可能有助于了解更多细节。

请给我一些代码好吗?:)我无法编写您需要的特定代码。但是很简单,您已经在onResume方法中保存了索引。只需等待数据与适配器一起加载到列表中,即可恢复数据,而不是onResume()。最初,索引的值为0。当屏幕第一次显示时,只需按照您希望的方式将其加载到特定索引。实际上,当我返回到我的listView时,我可以看到列表项中的小图像以闪烁一秒钟。这是否意味着什么?您使用什么来加载图像。这意味着它们将被重新绘制,但由于内存中有它们,因此会立即绘制它们。照我说的做就行了。在onPause上保存索引,并在用项目填充listView后使用该索引以滚动到该索引。(第一次启动将为0,因此不管怎样都可以)。不,它不是重复的。