0

私は「アーティストリスト」、音楽バンド、パフォーマー、作曲家の良いチャンクのリストを持っているアプリに取り組んでいます。それらは、ジャンルと相対的な人気によってソートされています。
メインアクティビティから、2つのタブがある「バンドリスト」アクティビティに移動します。そのうちの1つは、一般的な音楽ジャンルのリストが含まれる「ジャンル」タブです。各ジャンルをクリックすると、2つのタブが含まれるそれぞれのアクティビティに移動します。1つ目は[すべて]タブで、もう1つは[人気]タブです。各タブには、フィルタリングされたsqliteデータベースを含むフラグメントが含まれています(「フィルタリングされた」とは、フラグメント/ジャンルごとに新しいデータベースを使用するのではなく、さまざまなフラグメントで必要なものを表示するためにフィルタリングされる1つの大きなデータベースがあることを意味します)。これで、7つのジャンルと14のクラスができました。
私が今やりたいのは、クラスの数を2つ(すべて/人気)に減らすか、可能であれば、データベースを再度フィルタリングしてすべてのリストに同じフラグメントをリサイクルすることで、1つにすることです。これを行うには、押されたリストアイテム(ジャンル)の位置を含む「genres」フラグメントから、「All」タブと「Popular」タブ(フラグメント)を含むアクティビティに文字列を送信する必要があります。その文字列をさらにフラグメントに送信します。フラグメントは、この文字列を使用してsqliteデータベースをフィルタリングします。

もちろん、フラグメント通信に関するAndroid開発者ガイドを読んだことを追加する必要がありますが、フラグメントを定義しないなど、フラグメントを少し異なる方法で作成したため、コードでのアプローチの使用方法がわかりません。 xmlなので、そのため、メソッドの使用方法などがわかりませんgetSupportFragmentManager().findFragmentById(R.id.article_fragment);

これが、すべてのフラグメントを作成するためのTabListenerです。

public class TabListener<T extends Fragment> implements ActionBar.TabListener {
    private Fragment mFragment;
    private final Activity mActivity;
    private final String mTag;
    private final Class<T> mClass;

    public TabListener(Activity activity, String tag, Class<T> clz) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
    }

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        if (mFragment == null) {
            mFragment = Fragment.instantiate(mActivity, mClass.getName());
            ft.add(android.R.id.content, mFragment, mTag);
        } else {
            ft.attach(mFragment);
        }
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            ft.detach(mFragment);
        }
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {
    }
}

ありがとう、
アレクサ

4

2 に答える 2

0

プログラムでフラグメントを作成し、タグを付けて追加した場合、uはサポートFragmentManagerメソッドを使用できます:findFragmentByTag(String tag)

于 2013-01-10T02:19:16.950 に答える
0

もう少し試してみた後、私は最終的にsetArguments()とgetArguments()をあきらめ、これを親アクティビティで使用しました:
public int getPosition(){ return position; }
...そしてこれを子フラグメントで使用しました:
position=((ParentActivity) getActivity()).getPosition();
これが最も効率的な方法かどうかはわかりませんが、機能します素晴らしく、いくつかの単純なデータをフラグメントに送信することは、私のような初心者にとっては些細なことです。:)

于 2013-01-10T23:27:30.783 に答える