I am trying to update list fragment when an AsyncTask
in my activity completes but I am not sure if I am doing something wrong. Currently, I have a button that initiates the 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
}
}
});
Once my execute is finished I have following to instantiate fragment within my activity:
ResultFragment resultfrag = new ResultFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, resultfrag).commit();
However it doesnt seem to replace my content with the list fragment. Here is my layout file:
<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>
First replacing a fragment is nothing like refreshing it. Yes, it reloads every view in it and data as well. But you have to relate it with your new data. So i would recomment you to create a refresh method in your fragment and send this method your refreshed data, then notify your adapter as
dataSetChanged
.To achieve this, you're gonna need to reach your currently attached fragment and call its refresh method. You can use
findFragmentByTag
to reach it out.Edit: To clarify little bit more
When your
AsyncTask
is done, you should do something like thisonPostExecute
method:And in your
ResultFragment
you need to haverefreshData
method, which is something like this:And your list will be refreshed whenever your task is done.