当我在viewpager和tablayout中的标签中滑动时,我的应用程序崩溃[关闭]

问题描述 投票:-3回答:3

activity_viber.xml

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

    <android.support.design.widget.TabLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tablayout"
        android:background="@color/colorPrimaryDark"/>

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

</LinearLayout>

vi部二.Java

public class Viber extends AppCompatActivity {
    private PagesAdapter pageadapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_viber);

        TabLayout tab = (TabLayout)findViewById(R.id.tablayout);
        tab.addTab(tab.newTab().setText("Contact").setIcon(R.drawable.ic_contact_phone_black_24dp));
        tab.addTab(tab.newTab().setText("Add").setIcon(R.drawable.ic_person_add_black_24dp));
        tab.addTab(tab.newTab().setText("Message").setIcon(R.drawable.ic_message_black_24dp));

        pageadapter = new PagesAdapter(getSupportFragmentManager());

        final ViewPager viewPager = (ViewPager)findViewById(R.id.viewpager);
        viewPager.setAdapter(pageadapter);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tab));
        tab.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.home_menu,menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.search:
                Toast.makeText(this,"Clicked",Toast.LENGTH_SHORT).show();
                //startActivity(new Intent(this,Search.class));
                break;
            case R.id.publicacc:
                //startActivity(new Intent(Viber.this,Search.class));
                Toast.makeText(this,"Clicked",Toast.LENGTH_SHORT).show();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

pages adapter.Java

public class PagesAdapter extends FragmentPagerAdapter {
    int nooffrags=3;
    public PagesAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:
                ContactFragment cf = new ContactFragment();
                return cf;
            case 1:
                return new AddContactFragment();
            case 3:
                return new MessageFragment();
            default:
                return null;
        }
    }

    @Override
    public int getCount() {

        return nooffrags;
    }
}

我添加了3个选项卡,当我滑动视图寻呼机时,它将加载一秒钟并崩溃并在tab中相同。当选项卡加载一秒钟并崩溃时。并且当我检查被点击的项目或者没有点击时选项选择,但当我点击startActivity(new Intent(this,Search.this));它再次崩溃系统或应用程序任何解决方案。

java android
3个回答
1
投票

在你的getItem(int Position)中的PagesAdapter.java里面添加案例2:因为当你交换到3时它获得位置值2而案例2不可用所以它将返回默认值,即null,你将得到nullPointerException


0
投票

PagesAdapter.javacase 3:应该是case 2:


0
投票

使用此,因为案例2不可用,因此它将返回默认值

@Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:
                ContactFragment cf = new ContactFragment();
                return cf;
            case 1:
                return new AddContactFragment();
            case 2:
                return new MessageFragment();
            default:
                return null;
        }


    }

而不是这个

@Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:
                ContactFragment cf = new ContactFragment();
                return cf;
            case 1:
                return new AddContactFragment();
            case 3:
                return new MessageFragment();
            default:
                return null;
        }


    }
© www.soinside.com 2019 - 2024. All rights reserved.