मैं जिस अनुप्रयोग में विकास कर रहा हूं, मैं खंडों के साथ व्यूपार्जर का उपयोग कर रहा हूं और प्रत्येक खंड दृश्यपेजर के अन्य सभी टुकड़ों से स्वतंत्र रूप से अपना मेनू बना देता है।व्यूपेजर प्रारंभिक खंड से कार्य आइटम प्रदर्शित नहीं किए जा रहे हैं
समस्या यह है कि कभी-कभी खंड जो व्यूपार्जर द्वारा डिफ़ॉल्ट रूप से प्रारंभ किए जाते हैं (यानी इसके शुरुआती राज्य में) उनके आइटम एक्शन आइटम मेनू में आते नहीं हैं। इससे भी बदतर यह है कि यह मुद्दा केवल अंतःक्रियात्मक रूप से होता है। अगर मैं व्यूपेजर के माध्यम से पर्याप्त स्वाइप करता हूं ताकि टुकड़ों को फिर से शुरू करने के लिए मजबूर किया जा सके, जब मैं वापस स्वाइप करता हूं, तो मेनू सही ढंग से पॉप्युलेट करता है।
अभ्यास कोड:
package net.solarnz.apps.fragmentsample;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.v13.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
public class FragmentSampleActivity extends Activity {
private ViewPagerAdapter mViewPagerAdapter;
private ViewPager mViewPager;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (mViewPagerAdapter == null) {
mViewPagerAdapter = new ViewPagerAdapter(getFragmentManager());
}
mViewPager = (ViewPager) findViewById(R.id.log_pager);
mViewPager.setAdapter(mViewPagerAdapter);
mViewPager.setCurrentItem(0);
}
private class ViewPagerAdapter extends FragmentStatePagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return 8;
}
@Override
public Fragment getItem(int position) {
Fragment f = Fragment1.newInstance(position);
// f.setRetainInstance(true);
f.setHasOptionsMenu(true);
return f;
}
}
}
टुकड़ा कोड:
package net.solarnz.apps.fragmentsample;
import android.app.Fragment;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
public class Fragment1 extends Fragment {
int mNum;
static Fragment newInstance(int num) {
Fragment1 f = new Fragment1();
// Supply num input as an argument.
Bundle args = new Bundle();
args.putInt("num", num);
f.setArguments(args);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
mNum = getArguments() != null ? getArguments().getInt("num") : 0;
}
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_list, menu);
}
}
लेआउट:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<android.support.v4.view.ViewPager
android:id="@+id/log_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
मेनू:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_refresh"
android:title="Refresh"
android:icon="@android:drawable/ic_delete"
android:showAsAction="ifRoom|withText" />
</menu>
कार्रवाई मेनू डाला जा रहा: http://i.stack.imgur.com/QFMDd.png
कार्रवाई मेनू आबादी वाले नहीं किया जा रहा: http://i.stack.imgur.com/sH5Pp.png
Solarnz साथ सहमत ऐसा लगता है कि कोई स्पष्ट कामकाज नहीं है। मैंने एक [प्रदर्शनकर्ता ऐप] बनाया है (https://github.com/snodnipper/page-flipper-race-condition/) जो किसी को विश्वसनीय रूप से समस्या को पुन: पेश करने की अनुमति देता है। एक ही समस्या [एक्शनबारशेलॉक में रिपोर्ट की गई है] (https://github.com/JakeWharton/ActionBarSherlock/issues/351) और मैंने इसे [मुद्दा] उठाया है (http://code.google.com/p/android एंड्रॉइड इश्यू ट्रैकर में/मुद्दों/विवरण? आईडी = 2 9 472)। – snodnipper