2

После долгого времени между обучением коду и теперь я пытаюсь создать приложение для Android, которое использует вид списка карточек и использует вкладки.Создание фрагментов из списка с вкладками

Я хочу иметь список карт на всех 3 вкладках, но в каждом списке по-другому. Теперь, когда я сделал это, я получаю тот же набор во всех 3 вкладках. Я знаю, что делаю что-то неправильно, но после чтения на фрагментах и ​​вкладках я не могу понять, как это реализовать.

У меня есть следующее в моей MainActivity.

public class MainActivity extends FragmentActivity implements Card.CardMenuListener<Card>{ 

    private final Handler handler = new Handler(); 

    private PagerSlidingTabStrip tabs; 
    private ViewPager pager; 
    private MyPagerAdapter adapter; 

    private Drawable oldBackground = null; 
    private int currentColor = 0xFF3F9FE0; 


     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      // This is quick way of theming the action bar without using styles.xml (e.g. using ActionBar Style Generator) 
      getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.holo_blue_dark))); 
      getActionBar().setDisplayShowHomeEnabled(false); 

      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs); 
        pager = (ViewPager) findViewById(R.id.pager); 
        adapter = new MyPagerAdapter(getSupportFragmentManager()); 

        pager.setAdapter(adapter); 

      // Initializes a CardAdapter with a blue accent color and basic popup menu for each card 
      CardAdapter<Card> cardsAdapter = new CardAdapter<Card>(this) 
        .setAccentColorRes(android.R.color.holo_blue_light) 
        .setPopupMenu(R.menu.card_popup, this); 

      cardsAdapter.add(new CardHeader(this, R.string.themeheader)); 
      cardsAdapter.add(new Card("Action", "Launcher") 
          .setThumbnail(this, R.drawable.apps_actionlauncherpro)); // sets a thumbnail image from drawable resources 
      cardsAdapter.add(new Card("ADW", "Launcher") 
            .setThumbnail(this, R.drawable.apps_adwex)); // sets a thumbnail image from drawable resources 
      cardsAdapter.add(new Card("Apex", "Launcher") 
            .setThumbnail(this, R.drawable.apps_apexlauncher)); // sets a thumbnail image from drawable resources 
      cardsAdapter.add(new Card("Nova", "Launcher") 
            .setThumbnail(this, R.drawable.apps_novalauncher)); // sets a thumbnail image from drawable resources 

      CardListView cardsList = (CardListView) findViewById(R.id.cardsList); 
      cardsList.setAdapter(cardsAdapter); 

        final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources() 
            .getDisplayMetrics()); 
        pager.setPageMargin(pageMargin); 

        tabs.setViewPager(pager); 

     } 


     @Override 
     public void onMenuItemClick(Card card, MenuItem item) { 
      Toast.makeText(this, card.getTitle() + ": " + item.getTitle(), Toast.LENGTH_SHORT).show(); 
     } 

У меня есть это, чтобы установить вкладки, чтобы обеспечить 3, что я хочу

public class MyPagerAdapter extends FragmentPagerAdapter { 

      private final int[] TITLES = { R.string.tab1, R.string.tab2, R.string.tab3 }; 

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

      @Override 
      public CharSequence getPageTitle(int position) { 
        Locale l = Locale.getDefault(); 
        switch (position) { 
        case 0: 
          return getString(R.string.tab1).toUpperCase(l); 
        case 1: 
          return getString(R.string.tab2).toUpperCase(l); 
        case 2: 
          return getString(R.string.tab3).toUpperCase(l); 
        } 
        return null; 
      } 

      @Override 
      public Fragment getItem(int position) { 
        Fragment f = new Fragment(); 
        switch(position){ 
        case 0: 
          f=ThemeCardFragment.newInstance(position);  
          break; 
        case 1: 
          f=ThemeCardFragment.newInstance(position);  
          break; 
        } 
        return f; 
      } 

      @Override 
      public int getCount() { 
        return TITLES.length; 
      }  

я поместил следующее в моем фрагменте, который я уверен, что это неправильно.

public class ThemeCardFragment extends Fragment { 

private static final String ARG_POSITION = "position"; 

private int position; 

public static ThemeCardFragment newInstance(int position) { 
    ThemeCardFragment f = new ThemeCardFragment(); 
    Bundle b = new Bundle(); 
    b.putInt(ARG_POSITION, position); 
    f.setArguments(b); 
    return f; 
} 

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

    position = getArguments().getInt(ARG_POSITION); 
} 

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

    LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 

    FrameLayout fl = new FrameLayout(getActivity()); 
    fl.setLayoutParams(params); 

    return fl; 
} 
    } 

Я попытался посмотреть на примеры на здесь, учебники и Android разработчика, но я что-то, что позволит мне сделать это без вести.

Реалистично Я хотел бы определить

("Action", "Launcher") 

в CardsAdapter как строки из моего strings.xml

Любое понимание, чтобы указывать мне в правильном направлении будут оценены. Кажется, я продолжаю двигаться в неправильном направлении и провел не менее 10 часов, пытаясь понять это. Благодарю.

+0

Я предполагаю, что это должно было быть помечено как «java», а не «javascript». – Pavlo

ответ

0

Предлагаю сделать отдельные фрагменты для отдельного контента.

Накажите макеты из метода onCreateView() во фрагменты и инициализируйте свои списки. Удалите код списка из вашего MainActivity и поместите его внутри своих фрагментов.

Что касается вашего ViewPager, изменить его на что-то вроде этого:

@Override 
     public Fragment getItem(int position) { 
       Fragment f = new Fragment(); 
       switch(position){ 
       case 0: 
         f= new FragmentTheme();  
         break; 
       case 1: 
         f= new FragmentExtras();  
         break; 
       case 2: 
         f= new FragmentContact();  
         break; 
       } 
       return f; 
     } 

Надеется, что это помогает. Я изменил ваше рефинансирование github, чтобы подумать об этих изменениях.

Обязательно принимайте это как ответ, если он решил вашу проблему.

+0

Спасибо, отлично работает –

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