0

2 つのフラグメントを持つ ViewPager があります。最初のものにはボタン (メニュー) があり、それらはさまざまなカテゴリを表しています。2 つ目は、データを表示する listView です。ユーザーがメニュー項目の 1 つをクリックしたときに listView に表示されるデータを変更する方法を探しています。例: ユーザーがメニュー項目 1 (フラグメント 1) をクリックすると、フラグメント 2 の listView を対応するデータで更新する必要があります。

フラグメントに関する Google Android 開発者のドキュメントを読みましたが、解決できませんでした。問題の解決策が見つかりませんでした。

多分私は何かを逃していますか?

編集: listItems.clear() でデータのリスト (ArrayList> listItems) をクリアして、ListView をクリアしようとしました。adapter.clear() の実行方法がわかりませんでした。このメソッドはクラス Adapter に存在しないようです。

要約すると、ListView(Fragment2)を含むフラグメントに更新メソッドを作成しました。メイン アクティビティのコールバック メソッドを介して呼び出したところ、その部分は機能しているようです (デバッグ モードで確認しました)。私の Fragment 2 の update メソッドでは、listItems.clear() でデータをクリアしてから、フラグメントの OnActivityCreated() が実行されます。その中には、データをダウンロードし、OnPostExecute で ListView を作成するスレッドの呼び出しがあります。

これが私のコード(fragment2)のサンプルです:

// After data are ready
lvListe = (ListView) getView().findViewById(R.id.lvListe);
lvListe.setSelected(true);
lvListe.setScrollingCacheEnabled(false);

adapter = new LazyAdapter(getActivity(),
getActivity().getBaseContext(), listItems,
     R.layout.affichageitem, new String[] { "image", "title",
                    "subtitle" }, new int[] { R.id.img_title,
                    R.id.titre_main, R.id.soustitre_main });

lvListe.setAdapter(adapter);
lvListe.setClickable(true);

lvListe.setOnItemClickListener(onItemClickListener);

// Update method :

public void update(String requete, String type)
{
    this.type = type;
    this.requete = requete;

    listItems.clear();
}
4

2 に答える 2

2

私がおそらく行う方法は、Activityホスティングにコールバック メソッドを作成ViewPagerし、2 番目Fragmentにデータを更新するメソッドを作成することです。

次に、次のように呼び出します。

class Fragment1...
{
    ...
    callBackUpdate(data);
}

class Activity...
{
    ...
    public void callBackUpdate(String data)
    {
        Fragment2.update(data);
    }
}

class Fragment2...
{
    ...
    public void update(String data)
    {
        //do whatever
    }
}

開発者ページには、 へのコールバック メソッドを作成する方法が示されていますActivity

編集:実際には、それが開発者のページがそうするように言っている方法です。コールバックのインターフェイスOnArticleSelectedListenerを作成します。

編集: LazyLoader にこのライブラリを使用していると仮定しています: https://github.com/thest1/LazyList

その場合は、データを自分でクリアするメソッドを追加するだけです。これを行うには、ListAdapter に次のようなメソッドを追加します。

public void clear()
{
    data = new String[](); //depends on what data is, if it's a List then just call                             data.clear() for example
    imageLoader=new ImageLoader(activity.getApplicationContext()); //clear the images
    notifyDataSetChanged(); //notify the adapter that the data has changed
}

これは、現在の状況に正確に適合しない場合がありますが、アイデアを得る必要があります。

于 2012-07-31T21:26:52.000 に答える
0

http://developer.android.com/reference/android/app/FragmentTransaction.htmlで FragmentTransaction マネージャーと呼ばれるものを使用してみてください

また、FragmentManager http://developer.android.com/reference/android/app/FragmentManager.html

これを理解するには、FragmentManager と FragmentTransaction に関連する stackoverflow に関するいくつかの質問を確認してください。あなたがする必要があるのは、フラグメントを特定のxmlによって膨らませた新しいフラグメントに置き換えることだけです

于 2012-07-31T20:43:18.443 に答える