0

大学のプロジェクトとしてAndroid用のファイルマネージャーを書こうとしています。私のアイデアは、その中のフラグメントを使用して、ビューページャーでタブ付きのビューを作成することです。実際には、アプリをロードしたときに最初に表示されるのは、SDカードや音楽などがあるパス選択フラグメントです。このフラグメントには、上記のフォルダーのリストビューが含まれています。アイテムをクリックすると、別のフラグメントをページャーに追加したいのですが、それで問題ありません。しかし、現在のフラグメントを「クリックされた」フォルダーのグリッドビューに置き換えたいとも思います。それはうまくいきません。File []の配列リストを使用して、選択した各フォルダーにファイルを保存します。また、フラグメントアダプター内にメソッドを追加して、フラグメント配列リスト内のフラグメントを追加および置換しました。トランザクションと私のリストで試してみましたが、リストは正しく更新されていますが、ビューは更新されていません。次のコードは、フラグメントアダプタ内でフラグメントを置き換えるメソッドです。これは、私のリストビューに設定されたonItemclicklistenr内で呼び出されます。

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

}

私はこの問題についていくつかの答えを読み、ほとんどすべてを試しましたが、何も機能していないようです。どんな助けでも感謝されるでしょう。

4

2 に答える 2

1

私は恐ろしい解決策を見つけました。フラグメント リストを更新した後 (fragmenttransaction なし)、ビュー ページャーのアダプターを再設定し、現在のアイテムを復元します。このようにして、フラグメント レイアウトを強制的に構築します。美しくはないが、どうでもいい。これは、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 に答える