0

Android 앱에서 작업 중입니다. 탭이 4 개인 탭이 4 개 있습니다. Android 기기에서 앱을 실행했습니다. 하지만 내가 직면 한 문제는 첫 번째 2 탭을 클릭하면 제대로 작동하지만 3 번째 및 4 번째 탭을 열면 APP가 즉시 충돌한다는 것입니다.tabLayout의 일부 탭을 클릭하는 중 앱이 다운 됨

처음에는 3 번째 및 4 번째 조각에 버그가 있다고 생각했지만 이후에 3 번째 또는 4 번째 조각 버그가 아닌 것으로 나타났습니다. 나는 1, 2 단편을 3 단 및 4 단으로 대체하였고, 1 단 및 2 단편을 3 단 및 4 단편으로 교체 하였다. 그리고 같은 일이 여전히 일어났습니다!

이것은 내 main_activity.java입니다.

public class Main_activity extends AppCompatActivity { 

@Bind(R.id.main_activity) 
View mView; 
private int[] tabIcons = { 
     R.drawable.friend_chat, 
     R.drawable.call, 
     R.drawable.tab_contact, 
     R.drawable.profile 
}; 
private TabLayout tabLayout; 
private FragmentManager mFragmentManager; 
private FragmentTransaction mFragmentTransaction; 

private NonSwipeableViewPager viewPager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    mFragmentManager = getSupportFragmentManager(); 
    mFragmentTransaction = mFragmentManager.beginTransaction(); 
    mFragmentTransaction.replace(R.id.viewpager, new ConversationsFragment()).commit(); 


    viewPager = (NonSwipeableViewPager) findViewById(R.id.viewpager); 
    setupViewPager(viewPager); 

    tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 

    setupTabIcons(); 

} 

    private void setupTabIcons() { 
    tabLayout.getTabAt(0).setIcon(tabIcons[0]); 
    tabLayout.getTabAt(1).setIcon(tabIcons[1]); 
    tabLayout.getTabAt(2).setIcon(tabIcons[2]); 
    tabLayout.getTabAt(3).setIcon(tabIcons[3]); 

    int tabIconColor = ContextCompat.getColor(Main_Intergister.this, R.color.holo_red_dark); 

    tabLayout.getTabAt(0).getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN); 
    tabLayout.getTabAt(1).getIcon().setColorFilter(Color.parseColor("#a0a3a7"), PorterDuff.Mode.SRC_IN); 
    tabLayout.getTabAt(2).getIcon().setColorFilter(Color.parseColor("#a0a3a7"), PorterDuff.Mode.SRC_IN); 
    tabLayout.getTabAt(3).getIcon().setColorFilter(Color.parseColor("#a0a3a7"), PorterDuff.Mode.SRC_IN); 


    ColorStateList colors; 
    if (Build.VERSION.SDK_INT >= 23) { 
     colors = getResources().getColorStateList(R.color.ash, getTheme()); 
    } 
    else { 
     colors = getResources().getColorStateList(R.color.ash); 
    } 

    for (int i = 0; i < tabLayout.getTabCount(); i++) { 
     TabLayout.Tab tab = tabLayout.getTabAt(i); 
     assert tab != null; 
     Drawable icon = tab.getIcon(); 

     if (icon != null) { 
      icon = DrawableCompat.wrap(icon); 
      DrawableCompat.setTintList(icon, colors); 
     } 
    } 

    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      tab.getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN); 


      switch (tab.getPosition()) { 
       case 0: 
        viewPager.setCurrentItem(0); 
        break; 
       case 1: 
        viewPager.setCurrentItem(1); 
        break; 
       case 2: 
        viewPager.setCurrentItem(2); 
       case 3: 
        viewPager.setCurrentItem(3); 
        break; 
       default: 
        break; 
      } 

     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 
      tab.getIcon().setColorFilter(Color.parseColor("#a0a3a7"), PorterDuff.Mode.SRC_IN); 

     } 

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


     } 
    }); 
} 

    private void setupViewPager(NonSwipeableViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFragment(new ConversationsFragment(), "Chats"); 
    adapter.addFragment(new ContactsFragment(), "Calls"); 
    adapter.addFragment(new CallsFragment(), "Contacts"); 
    adapter.addFragment(new Profile_fragment(), "Profile"); 
    viewPager.setAdapter(adapter); 
} 

class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 

    public void addFragment(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return null; 
    } 
    } 
} 

이것은 내 main_activity.xml입니다.

<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/main_activity" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:fitsSystemWindows="true"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

      <android.support.design.widget.AppBarLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:theme="@style/AppTheme.AppBarOverlay" 
      android:id="@+id/appbar"> 

      <android.support.v7.widget.CardView 
       xmlns:card_view="http://schemas.android.com/apk/res-auto" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       card_view:cardElevation="4dp" 
       card_view:cardCornerRadius="0dp"> 

      <android.support.v7.widget.Toolbar 
       android:layout_width="match_parent" 
       android:id="@+id/toolbar" 
       android:layout_height="?attr/actionBarSize" 
       android:background="@color/white" 
       app:layout_scrollFlags="scroll|enterAlways" 
       app:elevation="6dp" 
       app:popupTheme="@style/AppTheme.PopupOverlay"> 


       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/toolbar_app_name" 
        android:text="@string/app_name" 
        android:textColor="@color/holo_red_dark" 
        android:textSize="30sp" 
        android:textStyle="bold"/> 
      </android.support.v7.widget.Toolbar> 

      </android.support.v7.widget.CardView> 
     </android.support.design.widget.AppBarLayout> 

     <com.solid.helpers.NonSwipeableViewPager 
      android:id="@+id/viewpager" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

     <android.support.v7.widget.CardView 
      xmlns:card_view="http://schemas.android.com/apk/res-auto" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      card_view:cardElevation="4dp" 
      card_view:cardCornerRadius="0dp"> 


     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabMode="fixed" 
      app:tabIndicatorColor="@color/white" 
      app:tabIndicatorHeight="8dp" 
      app:elevation="6dp" 
      app:tabGravity="fill" 
      android:background="@color/white"/> 

     </android.support.v7.widget.CardView> 

    </LinearLayout> 

</RelativeLayout> 



    </android.support.design.widget.CoordinatorLayout> 
+0

오류를 게시하십시오. –

+0

logcat에서 오류를 찾을 수 없습니다. –

답변

0

4 개의 탭이 있으므로 main_activity on event에서 다음 코드를 추가해보고 문제를 해결하는지 확인해보십시오.

viewpager.setOffscreenPageLimit (4);