2

Я пытаюсь показать разные макеты на разных вкладках в swipeable TabLayout, используя PagerTabStrip. Может ли кто-нибудь помочь?Как показать разные макеты в каждой вкладке в TabLayout с помощью фрагментов

Я хочу показать один макет в первой вкладке, второй другой макет во 2-й закладке и т.д.

public class MainActivity extends FragmentActivity { 


// create object of FragmentPagerAdapter 
SectionsPagerAdapter mSectionsPagerAdapter; 

// viewpager to display pages 
ViewPager mViewPager; 

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

    // Create the adapter that will return a fragment for each of the five 
    // primary sections of the app. 
    mSectionsPagerAdapter = new SectionsPagerAdapter(
      getSupportFragmentManager()); 

    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

} 

/** 
* A FragmentPagerAdapter that returns a fragment corresponding to one of 
* the sections/tabs/pages. 
*/ 
public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @SuppressLint("NewApi") 
    @Override 
    public Fragment getItem(int position) { 

     switch (position) { 
     case 0: { 
      //Show 1st Layout(Here I need HELP) 

      //HELP HELP HELP 

     }case 1: 
     { 
      //Show 2nd Layout(Here I need HELP) 

      //HELP HELP HELP 
     } 
     default: 
     } 
     Fragment fragment = new DummySectionFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     // Show 5 total pages. 
     return 6; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
     case 0: 
      return "Section 1"; 
     case 1: 
      return "Section 2"; 
     case 2: 
      return "Section 3"; 
     case 3: 
      return "Section 4"; 
     case 4: 
      return "Section 5"; 
     case 5: 
      return "Section 6"; 
     } 
     return null; 
    } 
} 

/** 
* A dummy fragment representing a section of the app, but that simply 
* displays dummy text. 
*/ 
public static class DummySectionFragment extends Fragment { 
    /** 
    * The fragment argument representing the section number for this 
    * fragment. 
    */ 
    public static final String ARG_SECTION_NUMBER = "section_number"; 

    public DummySectionFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // Create a new TextView and set its text to the fragment's section 
     // number argument value. 
     TextView textView = new TextView(getActivity()); 
     textView.setGravity(Gravity.CENTER); 
     textView.setTextSize(25); 
     textView.setText(Integer.toString(getArguments().getInt(
       ARG_SECTION_NUMBER))); 
     return textView; 
    } 
    } 

} 
+1

Просто изменить то, что ваш фрагмент. В onCreateView сделайте что-то вроде 'View view = inflater.inflate (R.layout.whatever_layout_you_want, container, false);', сделайте все, что вам нужно, с таким представлением, как набор TextViews, добавьте прослушиватели в Кнопки и т. Д., А затем вместо возвращая textView, верните завышенный 'view'. Вы можете установить аргументы фрагмента в позицию вкладки при создании экземпляра и использовать эту позицию из аргументов в коммутаторе, чтобы определить, какой макет для раздувания. – zgc7009

+0

Большое спасибо, это сработало. :) –

+0

Рад, что это сработало. Happy Coding :) – zgc7009

ответ

6
View rootView; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     switch (getArguments().getInt(ARG_SECTION_NUMBER)) 
     { 
      case 1: { 
       rootView = inflater.inflate(R.layout.fragment_bba, container, false); 
       break; 
      } 
      case 2: { 
       rootView = inflater.inflate(R.layout.fragment_bcom, container, false); 
       break; 
      } 

      case 3: { 
       rootView = inflater.inflate(R.layout.fragment_bca, container, false); 
       break; 
      } 

     } 
     return rootView; 
+0

TRY Это его рабочий –

0

Ok для людей, которые хотят, чтобы решить эту проблему, используя шаблоны проектирования.
Найти полное рабочее решение Here.

Если и писать фрагмент, основанный на если-иначе условие может решить проблему

switch(fragmentId) 
    { 
    case 1: 
    { 
     fragment 1 related stuff 
    } 
    case 2: 
    { 
    fragment 2 related stuff 
    } 
    ....... 
    ....... 
    and so on 

Но проблема с этим подходом, если в будущем,

1) вы решили добавить больше фрагментов

или

2) вы решили изменить некоторые функциональные возможности существующего фрагмента

Тогда вам придется изменить существующий код (внутри если-то еще условие)
Не предпочтительная практика программирования

Вместо этого вы можете следовать этот подход

public abstract class BasicFragment extends Fragment { 

public BasicFragment newInstance() 
{ 
    Log.d("Rohit", "new Instance"); 
    Bundle args = new Bundle(); 
    // args.putInt(ARG_PAGE, page); 
    BasicFragment fragment = provideYourFragment(); 
    fragment.setArguments(args); 
    return fragment; 

} 

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
} 

public View onCreateView(LayoutInflater inflater,ViewGroup parent, Bundle savedInstanseState) 
{ 
    View view = provideYourFragmentView(inflater,parent,savedInstanseState); 
    return view; 
} 

public abstract BasicFragment provideYourFragment(); 

public abstract View provideYourFragmentView(LayoutInflater inflater,ViewGroup parent, Bundle savedInstanceState); 
} 

Ваша реализация Фрагмент

public class ImageFragment extends BasicFragment{ 
@Override 
public BasicFragment provideYourFragment() { 

    return new ImageFragment(); 
} 

@Override 
public View provideYourFragmentView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.image_fragment,parent,false); 

    //Get your parent layout of fragment 
    RelativeLayout layout = (RelativeLayout)view; 

    //Now specific components here 

    ImageView imageView = (ImageView)layout.findViewById(R.id.myImage); 
    imageView.setImageResource(android.R.drawable.ic_media_play); 

    return view; 

} 
} 

Днем кодирования

 Смежные вопросы

  • Нет связанных вопросов^_^