0

我正在尝试为 android 编写一个文件管理器作为一个大学项目。我的想法是使用其中的片段为它创建一个带有 viewpager 的选项卡式视图。实际上,加载应用程序时获得的第一个视图是路径选择片段,其中有 SD 卡、音乐等。该片段包含所述文件夹的列表视图。当我单击一个项目时,我希望将另一个片段添加到寻呼机中,并且效果很好。但我也希望将当前片段替换为“单击”文件夹的网格视图。那是行不通的。我使用 File[] 的数组列表将文件存储在我选择的每个文件夹中。我还在片段适配器中添加了方法来添加和替换片段数组列表中的片段。尝试使用事务和我的列表,列表已正确更新,但视图未正确更新。以下代码是我的片段适配器中用于替换片段的方法。它在设置为我的列表视图的 onItemclicklistenr 中调用:

    public void replaceFragment(SherlockFragment newFragment, int pos) {
    SherlockFragment old=fragments.get(pos);
    fragments.set(pos, newFragment);
    notifyDataSetChanged();

}

我阅读了有关此问题的几个答案,几乎尝试了所有方法,似乎没有任何效果。任何帮助将不胜感激。

4

2 回答 2

1

我找到了一个可怕的解决方案。更新片段列表(没有片段事务)后,我为视图寻呼机重新设置适配器并恢复当前项目。通过这种方式,我强制构建片段布局。不漂亮,但随便。这是被称为 onclick 的界面:

@Override
    public void onPathSelected(int position) {
            // TODO Auto-generated method stub
            Log.d("positioninsideintfc", Integer.toString(position));
            firstrun.add(true);
            int current=mPager.getCurrentItem();
            root=(File) filepaths.get(position);
            fragmentfilelists.add(root.listFiles());
            initpath=MainActivity.root.getAbsolutePath();
            Gridfragment newfrag=Gridfragment.newInstance(current);
            mAdapter.addFragment(Selectpathfragment.newInstance(current+1));
            mAdapter.replaceFragment(newfrag, current);
            mPager.setAdapter(mAdapter);
            mPager.setCurrentItem(current);
    }
于 2012-10-18T10:34:45.323 回答
0

你应该学会Activity说你的框架使用的语言。一般来说,您的 Activity 应该实现Interface,然后您的 Fragment 将用于通信。因此,在您的情况下,当用户点击列表项时,带有列表视图的片段应告诉其父活动(使用所述界面)类似“用户点击此”的信息。您的父活动应该完成其余的工作,替换/添加片段。您的片段,就像在 OOP 中一样,不应该知道其他片段的存在。

于 2012-10-17T13:02:59.977 回答