2014-09-18 4 views
0

Я пытаюсь реализовать какой-то календарь с некоторыми расписаниями.ViewPager внутри каждой ячейки gridView

Я создал GridView, так как может быть несколько раз за тот же день, который я помещал в каждую ячейку ViewPager. Я создал все адаптеры, но есть странная проблема: содержимое пейджера видно только в первой ячейке gridview.

Если я поставил простой элемент TextView внутри ячейки, поэтому все содержимое отображается правильно в 1-й, 3-й и 5-й ячейках.

Вот мои файлы:

grid_row.xml: расположение одной GridView ячейки:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="60dp" 
android:layout_height="60dp" 
android:background="@drawable/square" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/row_day" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:fontFamily="sans-serif-bold" 
    android:textColor="#cfd8dc" 
    android:textSize="9sp" /> 

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

WhereFragment.java

[...] 
public class GridViewCustomAdapter extends BaseAdapter { 
    ArrayList<Day> officeDay; 

    public GridViewCustomAdapter(Day[] days) { 
     officeDay = new ArrayList<Day>(Arrays.asList(days)); 
    } 

    public int getCount() { 
     return 7; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 

     if (row == null) { 
      LayoutInflater inflater = getActivity().getLayoutInflater(); 
      row = inflater.inflate(R.layout.grid_row, parent, false); 
      TextView day = (TextView) row.findViewById(R.id.row_day); 
      ViewPager mPager = (ViewPager) row.findViewById(R.id.row_orari_pager); 

      day.setText(days[position]); 
      OrariPagerAdapter mPagerAdapter = new OrariPagerAdapter(getChildFragmentManager()); 
      mPager.setAdapter(mPagerAdapter); 
      } 
     return row; 
    } 

    public class OrariPagerAdapter extends FragmentStatePagerAdapter { 
     public ArrayList<Time> currentOrari; 
     public OrariPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public OrariObjectFragment getItem(int i) { 
      OrariObjectFragment fragment = new OrariObjectFragment(currentOrari); 
      Bundle args = new Bundle(); 
      args.putInt(OrariObjectFragment.ARG_OBJECT, i); 
      fragment.setArguments(args); 
      return fragment; 
     } 

     @Override 
     public int getCount() { 
      return 2; 
     } 

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

    @SuppressLint("ValidFragment") 
    public class OrariObjectFragment extends Fragment { 
     public static final String ARG_OBJECT = "object"; 
     public ArrayList<Time> orari; 

     public OrariObjectFragment(ArrayList<Time> currentOrari) { 
      orari = currentOrari; 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.orari_layout, container, false); 
      final int position = getArguments().getInt(ARG_OBJECT); 

      TextView orario = (TextView) rootView.findViewById(R.id.row_orario); 
      orario.setTextColor(Color.parseColor("#ff0000")); 

      return rootView; 
     } 
    } 
} 

orari_layout.xml

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 

<TextView 
    android:id="@+id/row_orario" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:fontFamily="sans-serif-light" 
    android:textColor="#607d8b" 
    android:textSize="15sp" 
    android:text="aoisjsdasdas"/> 

</LinearLayout> 

Это результат, поэтому заполняется только первая ячейка, а не две другие.

gridview

Любые советы? Спасибо всем

+0

Woo ... Секундочку. Правильно ли я это читаю? У вас есть адаптер для GridView, который внедряет в каждый вызов 'getView' FragmentStatePagerAdapter? Это ваша проблема. Вам нужно подойти к проблеме с совершенно другого ракурса. Кажется, каждая ячейка представляет месяц? Что именно вы пытаетесь отобразить в них? –

+0

Каждая ячейка представляет собой день, и каждая страница viewpager представляет время открытия. Я решил использовать параметр PageAdapter вместо FragmentStatePagerAdapter. – roccocullo

ответ

0
if (row == null) { 

О том, когда строка не равна нулю, т.е. все время после первой ячейки.

if (row == null) { 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     row = inflater.inflate(R.layout.grid_row, parent, false); 

    } 
    TextView day = (TextView) row.findViewById(R.id.row_day); 
    ViewPager mPager = (ViewPager) row.findViewById(R.id.row_orari_pager); 
    day.setText(days[position]); 
    OrariPagerAdapter mPagerAdapter = new OrariPagerAdapter(getChildFragmentManager()); 
    mPager.setAdapter(mPagerAdapter); 
+0

Я пробовал, но это не решение. В любом случае, я не могу понять, почему он работает с TextView, а не с Viewpager ... – roccocullo

0
if (row == null) { 
      LayoutInflater inflater = getActivity().getLayoutInflater(); 
      row = inflater.inflate(R.layout.grid_row, parent, false); 
      TextView day = (TextView) row.findViewById(R.id.row_day); 
      ViewPager mPager = (ViewPager) row.findViewById(R.id.row_orari_pager); 


      } 

day.setText(days[position]); 
      OrariPagerAdapter mPagerAdapter = new OrariPagerAdapter(getChildFragmentManager()); 
      mPager.setAdapter(mPagerAdapter); 
+0

@roccocullo, если эта работа, чем выше, это –

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