2012-05-22 4 views
3

Мне нужно создать четыре разных макета, каждый на странице ViewPagerIndicator. Как я могу это сделать? ViewPagerIndicator уже работает, но я использую образец от http://viewpagerindicator.com и создается простой TextView для всех страниц.Android: ViewPagerIndicator - Создание различных макетов для разных страниц

Смотрите образцу (TestFragment.java):

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

    TextView text = new TextView(getActivity()); 
    text.setGravity(Gravity.CENTER); 
    text.setText(mContent); 
    text.setTextSize(20 * getResources().getDisplayMetrics().density); 
    text.setPadding(20, 20, 20, 20); 

    LinearLayout layout = new LinearLayout(getActivity()); 
    layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
    layout.setGravity(Gravity.CENTER); 
    layout.addView(text); 

    return layout; 
} 

Мне нужно, чтобы определить текущую страницу (позиция) и относится к соответствующей схеме ресурсов (XML). Является ли это возможным?

Мне также необходимо убедиться, что все представления всех страниц будут загружены сразу только один раз, когда я создаю действие, позволяя обновлять значения позже.

Я ценю любую помощь !! Спасибо

ответ

6

Я нашел простое решение, которое работает для меня. Вот что я сделал.

TestFragment.class

 public static TestFragment newInstance(String content) { 
     TestFragment fragment = new TestFragment(); 
// 
//  StringBuilder builder = new StringBuilder(); 
//  for (int i = 0; i < 20; i++) { 
//   builder.append(content).append(" "); 
//  } 
//  builder.deleteCharAt(builder.length() - 1); 
     fragment.mContent = content; 

     return fragment; 
    } 

Закомментируйте для цикла здесь. Просто получите mContent, который мы собираемся использовать в качестве флага.

Теперь в вашем onCreateView() изменить его следующим образом,

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
//  TextView text = new TextView(getActivity()); 
//  text.setGravity(Gravity.CENTER); 
//  text.setText(mContent); 
//  text.setTextSize(20 * getResources().getDisplayMetrics().density); 
//  text.setPadding(20, 20, 20, 20); 
// 
//  LinearLayout layout = new LinearLayout(getActivity()); 
//  layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
//  layout.setGravity(Gravity.CENTER); 
//  layout.addView(text); 
     Log.i("mContent",mContent); 
     View view=null; 
     if(mContent.equalsIgnoreCase("title1")) 
     { 
      view = inflater.inflate(R.layout.one, container, false); 

     } 
     else if(mContent.equalsIgnoreCase("title2")) 
     { 
      view = inflater.inflate(R.layout.two, container, false); 
     } 
     else if(mContent.equalsIgnoreCase("title3")) 
     { 
      view = inflater.inflate(R.layout.three, container, false); 
     } 
     return view; 

    } 

То есть все, что нужно. Теперь вы сможете раздуть ваши взгляды на основе названия названия, которое мы использовали в качестве флага.

+0

Да! это оно! Это сработало для меня. Единственное, что я изменил в вашем коде, это то, что мне нужно работать с позицией страницы, а не с названием, потому что приложение является многоязычным. В классе, который расширяет Адаптер фрагментов, я изменил на: public Fragment getItem (int position) {return baseFragment.newInstance (String.valueOf (position));} – Daniel

+0

да. Это обряд. Я понял, что это не очень хорошая практика, но, поскольку вопрос был задан несколько часов назад, мне пришлось пойти на быстрое решение. Я счастлив, что это работает для вас. –

+0

Выполнено, спасибо – Daniel

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

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