how to implement AsyncTask in Fragment
I've a activity which output data from json as a list. But now I want to
implement it in a fragment as I planned to put them into a tab.
This is my Activity file:
public class ListsActivity extends Activity {
private static final String SALES_ID = "sid";
private static final String CAT_ID = "cat_id";
TextView capitalTextView;
ProgressDialog progressDialog;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
this.retrieveCapitals();
}
void retrieveCapitals() {
progressDialog = ProgressDialog.show(this,
"Please wait...", "Retrieving data...", true, true);
CapitalsRetrieverAsyncTask task = new CapitalsRetrieverAsyncTask();
task.execute();
progressDialog.setOnCancelListener(new CancelListener(task));
}
private class CapitalsRetrieverAsyncTask extends AsyncTask<Void, Void,
Void> {
Res res;
@Override
protected Void doInBackground(Void... params) {
File file = new File( "/json_example.txt");
if(file.exists()) {
try{
Reader inputStreamReader = new
InputStreamReader(new FileInputStream(file));
Gson gson = new Gson();
this.response = gson.fromJson(inputStreamReader,
Res.class);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (@SuppressWarnings("hiding") IOException e){
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
List<HashMap<String,String>> aList = new
ArrayList<HashMap<String,String>>();
for(Sales sales : this.response.sales){
HashMap<String, String> hm = new HashMap<String,String>();
//doing something
}
}
aList.add(hm);
}
}
// Keys used in HashMap
// Ids of views in listview_layout
// Instantiating an adapter to store each items
// R.layout.listview_layout defines the layout of each item
SimpleAdapter adapter = new SimpleAdapter(getBaseContext(),
aList, R.layout.listview_layout, from, to);
// Getting a reference to listview of main.xml layout file
ListView myList = ( ListView ) findViewById(R.id.listview);
// Setting the adapter to the listView
myList.setAdapter(adapter);
myList.setClickable(true);
// Item Click Listener for the listview
OnItemClickListener itemClickListener = new
OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View
container, int position, long id) {
Toast.makeText(getBaseContext(), ((TextView)
container).getText(), Toast.LENGTH_SHORT).show();
}
};
//myList.setTextFilterEnabled(true);
myList.setOnItemClickListener(itemClickListener);
progressDialog.cancel();
}
}
private class CancelListener implements OnCancelListener {
AsyncTask<?, ?, ?> cancellableTask;
public CancelListener(AsyncTask<?, ?, ?> task) {
cancellableTask = task;
}
@Override
public void onCancel(DialogInterface dialog) {
cancellableTask.cancel(true);
}
}
}
I want to put it into a following fragment file:
public class GridFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View gv = inflater.inflate(R.layout.hot_sales, null);
GridView gridView = (GridView) gv.findViewById(R.id.grid_view);
gridView.setAdapter(new ImageAdapter(this.getActivity()));
return gv;
//return super.onCreateView(inflater, container, savedInstanceState);
}
public class ImageAdapter extends BaseAdapter {
private Context mContext;
// Keep all Images in array
public Integer[] mThumbIds = {
R.drawable.sample_0,
R.drawable.sample_1, R.drawable.sample_2,
R.drawable.sample_3, R.drawable.sample_4,
R.drawable.sample_5, R.drawable.sample_6,
R.drawable.sample_7, R.drawable.sample_8,
R.drawable.sample_9, R.drawable.sample_10,
R.drawable.sample_11, R.drawable.sample_12,
R.drawable.sample_13, R.drawable.sample_14,
R.drawable.sample_15
};
// Constructor
public ImageAdapter(Context c){
mContext = c;
}
@Override
public int getCount() {
return mThumbIds.length;
}
@Override
public Object getItem(int position) {
return mThumbIds[position];
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
ImageView imageView;
if (convertView == null) { // if it's not recycled,
initialize some attributes
imageView = new ImageView(mContext);
imageView.setImageResource(mThumbIds[position]);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setLayoutParams(new GridView.LayoutParams(300, 200));
imageView.setPadding(10, 10, 10, 10);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Log.d("onClick","position ["+ position +"]");
//Toast.makeText(HotSalesFragment.this, "" + position,
Toast.LENGTH_SHORT).show();
}
});
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(mThumbIds[position]);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Log.d("onClick","position ["+position+"]");
if(position == 0){
Intent gk = new
Intent(getActivity().getApplicationContext(),
ShopsListsActivity.class);
startActivity(gk);
}
}
});
return imageView;
}
}
}
Note: In this fragment I want to view it as gridview. And both files works
fine. but when I tried to implement AsyncTask I gets several redflags as
unreachable code. Can some help me with this please?
No comments:
Post a Comment