पर "सामग्री दृश्य अभी तक नहीं बनाया गया" मैं viewpager
सेटअप के साथ एंड्रॉइड फ्रैगमेंट का उपयोग कर रहा हूं। असल में ऐसे 5 टैब होते हैं जिन्हें आप स्वाइप कर सकते हैं।एंड्रॉइड फ्रैगमेंट्स
5 में से 4 में ListFragments
हैं जो MySQL तालिकाओं द्वारा पॉप्युलेट किए गए हैं; यह AsyncTask
के अंदर किया जाता है। जब मैं बहुत तेजी से स्वाइप मैं कभी कभी यह त्रुटि प्राप्त:
09-01 07:54:01.243: E/AndroidRuntime(19706): FATAL EXCEPTION: main
09-01 07:54:01.243: E/AndroidRuntime(19706): java.lang.IllegalStateException: Content view not yet created
09-01 07:54:01.243: E/AndroidRuntime(19706): at android.support.v4.app.ListFragment.ensureList(ListFragment.java:328)
09-01 07:54:01.243: E/AndroidRuntime(19706): at android.support.v4.app.ListFragment.getListView(ListFragment.java:222)
09-01 07:54:01.243: E/AndroidRuntime(19706): at com.---.---.MasterCat$TopFrag$TopTask.onPostExecute(MasterCat.java:570)
09-01 07:54:01.243: E/AndroidRuntime(19706): at com.---.---.MasterCat$TopFrag$TopTask.onPostExecute(MasterCat.java:1)
09-01 07:54:01.243: E/AndroidRuntime(19706): at android.os.AsyncTask.finish(AsyncTask.java:631)
09-01 07:54:01.243: E/AndroidRuntime(19706): at android.os.AsyncTask.access$600(AsyncTask.java:177)
09-01 07:54:01.243: E/AndroidRuntime(19706): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
09-01 07:54:01.243: E/AndroidRuntime(19706): at android.os.Handler.dispatchMessage(Handler.java:99)
09-01 07:54:01.243: E/AndroidRuntime(19706): at android.os.Looper.loop(Looper.java:137)
09-01 07:54:01.243: E/AndroidRuntime(19706): at android.app.ActivityThread.main(ActivityThread.java:4928)
09-01 07:54:01.243: E/AndroidRuntime(19706): at java.lang.reflect.Method.invokeNative(Native Method)
09-01 07:54:01.243: E/AndroidRuntime(19706): at java.lang.reflect.Method.invoke(Method.java:511)
09-01 07:54:01.243: E/AndroidRuntime(19706): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
09-01 07:54:01.243: E/AndroidRuntime(19706): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
09-01 07:54:01.243: E/AndroidRuntime(19706): at dalvik.system.NativeStart.main(Native Method)
मैं intentionly एक ProgressDialog
उपयोग नहीं किया है, क्योंकि यह काफ़ी स्वाइप हकलाना बनाता है।
तो मैं दो विकल्प हैं और मैं किसी भी तरह से मदद की जरूरत है:
कैसे इस त्रुटि को रोकने के लिए और यहाँ तक कि जब स्वाइप ताज़ा सूची रखने के लिए।
या 5 टुकड़े लोड होने के बाद, 'स्वाइप करते समय ताज़ा करें' बंद करें। दूसरे शब्दों में, सूचियां तब तक रहेंगी जब तक आप गतिविधि से बाहर नहीं आते और वापस आते हैं।
मैं विकल्प # 1 पसंद करूंगा। कृपया मुझे पता कौन-सा कोड देखने की जरूरत है:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_layout);
mSectionsPagerAdapter = new SectionsPagerAdapter(
getSupportFragmentManager());
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mViewPager = (ViewPager) findViewById(R.id.viewpager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager
.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
actionBar.addTab(actionBar.newTab()
.setText(mSectionsPagerAdapter.getPageTitle(i))
.setTabListener(this));
}
}
public void onTabUnselected(ActionBar.Tab tab,
FragmentTransaction fragmentTransaction) {
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
mViewPager.setCurrentItem(tab.getPosition());
}
public void onTabReselected(ActionBar.Tab tab,
FragmentTransaction fragmentTransaction) {
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment f = null;
switch (position) {
case 0: {
f = new MasterFrag();
Bundle args = new Bundle();
f.setArguments(args);
break;
}
case 1: {
f = new FeaturedFrag();
Bundle args = new Bundle();
f.setArguments(args);
break;
}
case 4: {
f = new TopFrag();
Bundle args = new Bundle();
f.setArguments(args);
break;
}
case 3: {
f = new NewFrag();
Bundle args = new Bundle();
f.setArguments(args);
break;
}
case 2: {
f = new TrendFrag();
Bundle args = new Bundle();
f.setArguments(args);
break;
}
default:
throw new IllegalArgumentException("not this many fragments: "
+ position);
}
return f;
}
इसके अलावा, लाइन 570 LogCat में संदर्भित एक getListView() एक AsyncTask के अंदर जो ऊपर दिखाए नहीं एक ListFragment के अंदर है से संबंधित है।
संपादित:
5 टुकड़े में से एक जोड़ा जा रहा है - एक LogCat में संदर्भित - "TopFrag"
class TopTask extends AsyncTask<String, String, Void> {
InputStream is = null;
String result = "";
@Override
protected Void doInBackground(String... params) {
String url_select = "http://www.---.com/---/---.php";
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url_select);
ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();
param.add(new BasicNameValuePair("Top", "Top"));
try {
httpPost.setEntity(new UrlEncodedFormEntity(param));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
// read content
is = httpEntity.getContent();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
}
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = "";
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
// TODO: handle exception
Log.e("log_tag", "Error converting result " + e.toString());
}
return null;
}
protected void onPostExecute(Void v) {
String item, cat;
try {
JSONArray jArray = new JSONArray(result);
JSONObject json_data = null;
for (int i = 0; i < jArray.length(); i++) {
json_data = jArray.getJSONObject(i);
item = json_data.getString("item");
cat = json_data.getString("category");
items.add(item);
cats.add(cat);
}
} catch (JSONException e1) {
Toast.makeText(getActivity(), "No Top Items Found",
Toast.LENGTH_LONG).show();
} catch (ParseException e1) {
e1.printStackTrace();
}
ListView listView;
listView = getListView();
listView.setTextFilterEnabled(true);
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long id) {
// edit
}
});
MasterCatObject[] mco = new MasterCatObject[items.size()];
int index = 0;
for (@SuppressWarnings("unused")
String i : items) {
mco[index] = new MasterCatObject(items.get(index),
cats.get(index));
index++;
}
adapter = new AllTimeAdapter(getActivity(), mco);
setListAdapter(adapter);
}
}
}
मुझे PostExecute के अंदर सामान्य 'getListView() 'द्वारा' ListView' प्राप्त हो रहा है - क्या इसे 'ऑनएक्टिविटीक्रेटेड' में रखना बेहतर होगा? – KickingLettuce
'ऑनएक्टिविटी क्रिएटेड' काम करना चाहिए, लेकिन मैं इसे 'सुपर' पर कॉल करने के बाद 'ऑन क्रिएटिव्यू' में डाल दूंगा क्योंकि यह निश्चित रूप से एक ऐसा स्थान है जहां आप सुनिश्चित कर सकते हैं कि 'ListView' बनाया गया है। – zapl
सही चिह्नित करना; मैं पहले से ही देख सकता हूं कि चीजें अधिक स्थिर हैं। – KickingLettuce