带有FragmentPagerAdapter的ViewPager不显示内容

时间:2019-12-02 12:57:47

标签: android android-fragments android-viewpager

我正在尝试使用Fragment 这是我的活动课:

var body: some View {
        VStack {
            Spacer()
            ZStack(alignment: .center) {
                RoundedRectangle(cornerRadius: 10).foregroundColor(Color.white)
                VStack {
                    Text("Add your Income").font(Fonts.mediumFont)
                    HStack(alignment: .center, spacing: 0) {

                        CustomTextField(placeHolderLabel: "Amount", val: $amount, keyboardType: UIKeyboardType.decimalPad).padding()

                         HStack {
                             Button("\(currency.rawValue)"){
                                 self.show_currencyActionsheet = true
                             }
                                 .font(Fonts.callout)
                                 .foregroundColor(Colors.textFieldFloatingLabel)
                             .actionSheet(isPresented: self.$show_currencyActionsheet) {self.actionSheetCurrency}
                             Image(systemName: "chevron.down")
                              .imageScale(.small)
                        }.padding()
                    }.padding([.leading,.trailing])

                    Button(action: {
                        self.callBack()
                    }) {

                        Text("                Add Income                ").font(Fonts.callout).foregroundColor(Color.white)
                    }
                    .padding()
                    .background(Colors.darkGreen)
                    .clipShape(Capsule())
                }
            }.frame(minHeight: 150, idealHeight: 182, maxHeight: 200)
            .padding()
            Spacer()

        }.background(VisualEffectView(effect: UIBlurEffect(style: .dark))
        .edgesIgnoringSafeArea(.all))
    }

struct VisualEffectView: UIViewRepresentable {
    var effect: UIVisualEffect?
    func makeUIView(context: UIViewRepresentableContext<Self>) -> UIVisualEffectView { UIVisualEffectView() }
    func updateUIView(_ uiView: UIVisualEffectView, context: UIViewRepresentableContext<Self>) { uiView.effect = effect }
}

ViewPagerFragmentAdapter看起来像这样:

public class InterfaceAct extends FragmentActivity implements View.OnClickListener {
    private ViewPager mViewPager;
    private List<Fragment> datas;
    private ViewPagerFragmentAdapter viewPagerFragmentAdapter;
    private LinearLayout mLLHome,mLLTimer,mLLEdit,mLLAbout;
    private ImageView mImageViewHome,mImageViewTimer,mImageViewEdit,mImageViewAbout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activiy_interface);
        initDatas();// Init Data For Fragments
        initView();//  Init Component
        initEvent();//  Sign for Click Listener
        viewPagerFragmentAdapter=new ViewPagerFragmentAdapter(getSupportFragmentManager(),datas);// Init Adpater Class
        mViewPager.setAdapter(viewPagerFragmentAdapter);
    }
    private void initDatas() {
        datas=new ArrayList<Fragment>();
        datas.add(new MyFragment1());
        datas.add(new MyFragment2());
        datas.add(new MyFragment3());
        datas.add(new MyFragment4());
    }
    private void initEvent() {
        mLLHome.setOnClickListener(this);
        mLLTimer.setOnClickListener(this);
        mLLEdit.setOnClickListener(this);
        mLLAbout.setOnClickListener(this);
        mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {//ViewPager Scrolling Switch Listner
            @Override
            public void onPageSelected(int arg0) {
                int currentItem=mViewPager.getCurrentItem();
                resetImag();
                switch (currentItem) {
                    case 0:
                        mImageViewHome.setImageResource(R.drawable.home_yes);
                        break;
                    case 1:
                        mImageViewTimer.setImageResource(R.drawable.timer_yes);
                        break;
                    case 2:
                        mImageViewEdit.setImageResource(R.drawable.edit_yes);
                        break;
                    case 3:
                        mImageViewAbout.setImageResource(R.drawable.about_yes);
                        break;
                    default:
                        break;
                }
            }
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {

            }
            @Override
            public void onPageScrollStateChanged(int arg0) {

            }
        });
    }
    private void initView() {
        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        mLLHome = (LinearLayout) findViewById(R.id.ll_home);
        mLLTimer = (LinearLayout) findViewById(R.id.ll_timer);
        mLLEdit = (LinearLayout) findViewById(R.id.ll_edit);
        mLLAbout = (LinearLayout) findViewById(R.id.ll_about);
        mImageViewHome = (ImageView) findViewById(R.id.img_home);
        mImageViewTimer = (ImageView) findViewById(R.id.img_timer);
        mImageViewEdit = (ImageView) findViewById(R.id.img_edit);
        mImageViewAbout = (ImageView) findViewById(R.id.img_about);
    }
    @Override
    public void onClick(View v) {
        resetImag();
        switch (v.getId()) {
            case R.id.ll_home:
                mViewPager.setCurrentItem(0);
                mImageViewHome.setImageResource(R.drawable.home_yes);
                break;
            case R.id.ll_timer:
                mViewPager.setCurrentItem(1);
                mImageViewTimer.setImageResource(R.drawable.timer_yes);
                break;
            case R.id.ll_edit:
                mViewPager.setCurrentItem(2);
                mImageViewEdit.setImageResource(R.drawable.edit_yes);
                break;
            case R.id.ll_about:
                mViewPager.setCurrentItem(3);
                mImageViewAbout.setImageResource(R.drawable.about_yes);
                break;
            default:
                break;
        }
    }
    private void resetImag() {// Reset Picture
        mImageViewHome.setImageResource(R.drawable.home_no);
        mImageViewTimer.setImageResource(R.drawable.timer_no);
        mImageViewEdit.setImageResource(R.drawable.edit_no);
        mImageViewAbout.setImageResource(R.drawable.about_no);
    }
}

页面的布局,它包括一个viewpager和一个线性布局的菜单栏:

public class ViewPagerFragmentAdapter extends FragmentStatePagerAdapter {
    private List<Fragment> datas;
    public ViewPagerFragmentAdapter(FragmentManager fm,List<Fragment> datas) {
        super(fm);
        this.datas=datas;
    }
    @Override
    public Fragment getItem(int position) {// Return View Object
        return datas.get(position);
    }
    @Override
    public int getCount() {// Return View Num
        return datas.size();
    }
    @Override
    public Object instantiateItem(ViewGroup container, int position) {// Init View
        return super.instantiateItem(container, position);
    }
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {// Destroy View
        super.destroyItem(container, position, object);
    }
}

这是片段之一:

?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="449dp"
        android:layout_weight="1"></android.support.v4.view.ViewPager>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:background="#ffffffff"
        android:orientation="horizontal" >
        <LinearLayout
            android:id="@+id/ll_home"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >
            <ImageView
                android:id="@+id/img_home"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:background="#0000"
                android:src="@drawable/home_yes" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Home"
                android:textColor="#b6b3b3" />
        </LinearLayout>
        <LinearLayout
            android:id="@+id/ll_timer"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >
            <ImageView
                android:id="@+id/img_timer"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:background="#0000"
                android:src="@drawable/timer_no" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Timer"
                android:textColor="#b6b3b3" />
        </LinearLayout>
        <LinearLayout
            android:id="@+id/ll_edit"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >
            <ImageView
                android:id="@+id/img_edit"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:background="#0000"
                android:src="@drawable/edit_no" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Edit"
                android:textColor="#b6b3b3" />
        </LinearLayout>
        <LinearLayout
            android:id="@+id/ll_about"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >
            <ImageView
                android:id="@+id/img_about"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:background="#0000"
                android:src="@drawable/about_no" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="About"
                android:textColor="#b6b3b3" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

我为viewpager准备了四个片段(它们基本上是相同的,但布局不同),这是tab1布局的样子:

public class MyFragment1 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.tab1,null);
    }
}

运行菜单时,我只有菜单栏,没有设置viewpager,也不知道为什么

1 个答案:

答案 0 :(得分:0)

删除android:layout_weight =“ 1” <Viewpager>并将android:orientation="vertical"添加到线性布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" 
    android:orientation="vertical"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="449dp"
       ></android.support.v4.view.ViewPager> 
       //-----------