3

アクティビティの完了時にリスト フラグメントを更新しようとしてAsyncTaskいますが、何か問題があるかどうかはわかりません。現在、次を開始するボタンがありますAsyncTask

search = (Button)findViewById(R.id.search);
    search.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String productname = prodname.getText().toString().trim();
                    if (NetworkManager.isOnline(getApplicationContext())){
                        // Go to Other screen
                        AsyncFetcher results = new AsyncFetcher(currActivity);
                        String _url = "http://192.168.1.3:3000/search.json?
                                       utf8=%E2%9C%93&q="+productname;
                        // progressDialog = ProgressDialog.show(
                        //    ClassifiedsActivity.this, "", "Loading...");
                        results.execute(_url);
                    } else {
                        // Throw some warning saying no internet 
                        // connection was found
                    }
                }
            });

実行が終了したら、アクティビティ内でフラグメントをインスタンス化するために次のことを行います。

ResultFragment resultfrag = new ResultFragment();
getSupportFragmentManager().beginTransaction()
                           .replace(R.id.content_frame, resultfrag).commit();

ただし、コンテンツをリストフラグメントに置き換えていないようです。ここに私のレイアウトファイルがあります:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>
4

1 に答える 1

12

最初にフラグメントを置き換えることは、フラグメントをリフレッシュすることとはまったく異なります。はい、その中のすべてのビューとデータも再読み込みします。ただし、それを新しいデータと関連付ける必要があります。したがって、フラグメントに更新メソッドを作成し、このメソッドに更新されたデータを送信してから、アダプタに として通知することをお勧めしますdataSetChanged

これを実現するには、現在アタッチされているフラグメントに到達し、その更新メソッドを呼び出す必要があります。あなたはfindFragmentByTagそれに到達するために使用することができます。

編集:もう少し明確にするために

完了したらAsyncTask、次のようなonPostExecute方法を実行する必要があります。

ResultFragment resultFrag = (ResultFragment) getSupportFragmentManager()
                                 .findFragmentByTag("FragToRefresh");
if (resultFrag != null) {
    resultFrag.refreshData(refreshedArray);
}

そして、あなたには次のようなメソッドResultFragmentが必要です:refreshData

public void refreshData(ArrayList<YourObject> data) {
   yourArray = new ArrayList<YourObject>(data);
   yourAdapter.notifyDataSetChanged();
}

また、タスクが完了するたびにリストが更新されます。

于 2013-05-05T20:10:15.883 に答える