我正在尝试在我的活动中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>
答案 0 :(得分: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();
}
只要您的任务完成,您的列表就会刷新。