让我解释一下我的问题.. 假设我有三个标签 - FragmentTab1 / FragmentTab2 /FragmentTab3。
现在我在 FragmentTab1 中有列表视图。在这里,我使用 AsyncTask 加载数据OnCreateView()
。
数据正在完美加载。现在,当我查看详细信息并再次返回到 FragmentTab1 中的列表视图时。这里再次加载整个数据,浪费了先前加载的数据。
现在,我需要一个解决方案,它可以在回溯时一次又一次地停止执行 AsyncTask,同时保留整个视图和数据,就像我们在已弃用的 TabHost 中执行工作一样。
任何帮助或建议将不胜感激。
这是我的代码内容。
public class Talk extends Fragment {
/** Define global variables over here */
//private ProgressDialog pDialog;
StaticApiList sal;
TalkModelAll tma;
JSONObject myJasonObject = null;
private ListView lv;
private ArrayList<TalkModelAll> m_ArrayList = null;
//ArrayList<String> stringArrayList = new ArrayList<String>();
TalkArrayAdapter taa;
Set<String> uniqueValues = new HashSet<String>();
TextView rowTextView = null;
int postid;
String title;
String thumsrc;
String largeimg;
String excert;
String description;
String cat;
String myUrl;
String jsonString;
int mCurCheckPosition;
String check_state = null;
String ccc;
LinearLayout myLinearLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.talk, container, false);
new TalkAsyncTask().execute();
/*if(check_state == null){
new TalkAsyncTask().execute();
}else{
new TalkAsyncTask().execute();
Toast.makeText(getActivity(), "Have no null value for reloading fragment", Toast.LENGTH_LONG).show();
}*/
LinearLayout ll = (LinearLayout) rootView.findViewById(R.id.talk_ll);
ll.setBackgroundColor(getActivity().getResources().getColor(R.color.talk_red_bottom));
Log.d("track", "=================> " +uniqueValues.size());
myLinearLayout = (LinearLayout) rootView.findViewById(R.id.talk_ll_uni);
return rootView;
}
private class TalkAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
/*pDialog = new ProgressDialog(getActivity());
pDialog.setMessage("Please wait ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();*/
}
@Override
protected String doInBackground(String... params) {
sal = new StaticApiList();
myUrl = StaticApiList.talk_api;
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(myUrl);
try {
HttpResponse httpResponse = httpClient.execute(httpGet);
System.out.println("httpResponse");
InputStream inputStream = httpResponse.getEntity().getContent();
InputStreamReader inputStreamReader = new InputStreamReader(
inputStream);
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);
StringBuilder stringBuilder = new StringBuilder();
String bufferedStrChunk = null;
while ((bufferedStrChunk = bufferedReader.readLine()) != null) {
stringBuilder.append(bufferedStrChunk);
}
jsonString = stringBuilder.toString();
Log.i("talk_all_json", jsonString);
return stringBuilder.toString();
} catch (ClientProtocolException cpe) {
System.out.println("Exception generates caz of httpResponse :"
+ cpe);
cpe.printStackTrace();
} catch (IOException ioe) {
System.out
.println("Second exception generates caz of httpResponse :"
+ ioe);
ioe.printStackTrace();
}
return null;
}
@SuppressLint("DefaultLocale")
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
check_state = jsonString;
try{
m_ArrayList = new ArrayList<TalkModelAll>();
if (jsonString.length() > 0) {
JSONArray jArray = new JSONArray(jsonString);
for(int i=0; i < jArray.length(); i++) {
JSONObject jObject = jArray.getJSONObject(i);
title = jObject.getString("title");
thumsrc = jObject.getString("thumsrc");
largeimg = jObject.getString("largeimg");
excert = jObject.getString("excert");
description = jObject.getString("description");
cat = jObject.getString("cat");
postid = jObject.getInt("postid");
/////////// stringArrayList.add(jObject.getString("cat"));
uniqueValues.add(jObject.getString("cat")); // Set unique elements in string array list
int a = 0;
if(a == 0){
uniqueValues.add("All,");
a = 1;
}
ccc = uniqueValues.toString();
Log.d("unique","========================> " + ccc);
Log.d("talklog", "Title -> " + title + " , thumsrc -> " + thumsrc + " , largeimg -> " + largeimg
+ " , excert -> " + excert + " , description -> " + description + " , cat -> " + cat + " , " + "PostId " + postid );
Log.d("talklog", "============================= end of " + i + " ===============================");
tma = new TalkModelAll();
tma.title = title;
tma.thumsrc = thumsrc;
tma.largeimg = largeimg;
tma.excert = excert;
tma.description = description;
tma.cat = cat;
tma.postid = postid;
m_ArrayList.add(tma);
}
String[] split_unique = ccc.split(",");
Arrays.sort(split_unique);
for(int i = 0; i < split_unique.length; i++){
Log.d("split_unique", "====>><< " + split_unique.length);
Log.d("split_unique", "====>><< " + ccc.split(",")[i]);
}
// When we need dynamic number of text view's ..
final int N = split_unique.length; // total number of textviews to add
final TextView[] myTextViews = new TextView[N]; // create an empty array;
for (int i = 0; i < N; i++) {
// create a new textview
rowTextView = new TextView(getActivity());
// set some properties of rowTextView or something talk_ll_uni
rowTextView.setText((split_unique[i].replaceAll("[|?*<\":>+\\[\\]/']", "") + " ").toUpperCase());
rowTextView.setTextColor(getActivity().getResources().getColor(R.color.talk_red_bottom));
rowTextView.setTextSize(25);
rowTextView.setId(i);
// add the textview to the linearlayout
myLinearLayout.addView(rowTextView);
// saving a reference to the textview for later
myTextViews[i] = rowTextView;
}
//if you want your array
///// String [] stringArray = stringArrayList.toArray(new String[stringArrayList.size()]);
}
taa = new TalkArrayAdapter(getActivity(), m_ArrayList);
lv = (ListView) getActivity().findViewById(R.id.talk_list);
lv.setVisibility(View.VISIBLE);
lv.setAdapter(taa);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
TalkDetail fragment = new TalkDetail();
Bundle bundle = new Bundle();
bundle.putString("title", m_ArrayList.get(arg2).title);
bundle.putString("largeimg", m_ArrayList.get(arg2).largeimg);
bundle.putString("excert", m_ArrayList.get(arg2).excert);
bundle.putString("description", m_ArrayList.get(arg2).description);
bundle.putString("cat", m_ArrayList.get(arg2).cat);
//bundle.putInt("postid", m_ArrayList.get(arg2).postid);
fragment.setArguments(bundle);
((BaseContainerFragment)getParentFragment()).replaceFragment(fragment, true);
}
});
}catch(Exception e){
e.printStackTrace();
}
//pDialog.dismiss();
}
}
}
我用谷歌搜索了很多,但无法得到确切的点。我还在 StackOverFlow 上使用其他建议的东西时检查了不同的方法。
预先感谢您的合作。