Trong ứng dụng tôi đang phát triển, tôi đang sử dụng một ViewPager với các đoạn và mỗi đoạn xây dựng trình đơn riêng của mình độc lập với tất cả các mảnh khác trong ViewPager.Các mục hành động từ phân đoạn ban đầu của Viewpager không được hiển thị
Vấn đề là đôi khi các mảnh được khởi tạo bởi ViewPager theo mặc định (tức là ở trạng thái ban đầu) không có các mục của chúng được điền vào menu mục tác vụ. Điều tệ hơn là vấn đề này chỉ xảy ra liên tục. Nếu tôi vuốt qua ViewPager đủ để các mảnh bị buộc phải khởi tạo lại bản thân, khi tôi vuốt lại, trình đơn sẽ điền chính xác.
đang Hoạt động:
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;
}
}
}
đang Fragment:
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);
}
}
Layout:
<?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>
Menu:
<?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>
menu Action được dân cư: http://i.stack.imgur.com/QFMDd.png
menu Action không phải là dân cư: http://i.stack.imgur.com/sH5Pp.png
Đồng ý với Solarnz dường như không có cách giải quyết rõ ràng nào. Tôi đã tạo ra một [ứng dụng trình diễn] (https://github.com/snodnipper/page-flipper-race-condition/) cho phép người ta tái tạo lại vấn đề một cách đáng tin cậy. Vấn đề tương tự dường như [được báo cáo trong ActionBarSherlock] (https://github.com/JakeWharton/ActionBarSherlock/issues/351) và tôi đã nêu ra [vấn đề] này (http://code.google.com/p/android/issues/detail? id = 29472) trong trình theo dõi vấn đề android. – snodnipper