Диалог не показывает абсолютно никакого контента?

В основном я просто хочу иметь пейджер для просмотра в диалоге. Вот и все, но почему-то диалог пустой?

Вот мой код диалога:

final Dialog dialog = new Dialog(this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.voicedialog);
    dialog.setCanceledOnTouchOutside(false);

    MyPageAdapter adapter = new MyPageAdapter();
    ViewPager pager = (ViewPager) dialog.findViewById(R.id.viewpager);
    pager.setOffscreenPageLimit(3);
    pager.setAdapter(adapter);

    dialog.show();

А вот диалоговое окно макета,voicedialog, просто пустой вид пейджера:

<android.support.v4.view.ViewPager
    android_id="@+id/viewpager"
    
    android_layout_width="match_parent"
    android_layout_height="match_parent"

    />

Вот адаптер:

public class MyPageAdapter extends PagerAdapter {
    public Object instantiateItem(ViewGroup collection, int position) {

        int resId = 0;
        switch (position) {
            case 0:
                resId = R.id.voice1;
                break;
            case 1:
                resId = R.id.voice2;
                break;
            case 2:
                resId = R.id.voice3;
                break;
        }
        return collection.findViewById(resId);
    }

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

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == arg1;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View)object);
    }
}

ТАК ПРОСТО, ПРАВДА? Однако при запуске этого кода я получаю пустое диалоговое окно:

Вместо этого он должен показать мои три макета (voice1, voice2, voice3), которые я могу прокрутить! Эти макеты просто имеют textview, но он не отображается.

Пожалуйста, дайте мне знать, как я могу это сделать. Это расстраивает-я потратил почти 6 часов, пытаясь решить эту проблему 🙂

2 ответа

  1. Во-первых, внутри вашего PagerAapter получить контекст, список и LayoutInflator через конструктор, как это

    Context mContext;
    LayoutInflater mLayoutInflater;
    List<String> mList;
    
    public MyPageAdapter(Context context, List<String> list) {
        mContext = context;
        mList = list;
        mLayoutInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    

    Затем верните размер списка в getItemCount метод

    @Override
    public int getCount() {
        return mList.Size;
    }
    

    Затем

    public Object instantiateItem(ViewGroup collection, int position) {
         View view = inflater.inflate(R.layout.your_layout, null);
         TextView textView = (TextView) layout.findViewById(R.id.text_view);
         textView.setText(mList.get(postiion);
         collection.addView(view);
         return view;
    }
    
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
         container.removeView((View)object);
      }
    }
    
  2. Выполните следующие действия, чтобы открыть viewPager в диалоговом окне

    1-On нажмите кнопку, Откройте фрагмент, который расширяет DialogFragment, объявить и инициализировать viewpager в этом DialogFragment

    2-Далее создайте адаптер, который расширяет FragmentPagerAdapter, который из android.поддержка.v13.приложение.FragmentPagerAdapter, для этого адаптера вы должны использовать этот gradle: — compile ‘ com.андроид.поддержка: поддержка-v13:+’

    Открыть DialogFragment on нажмите кнопку

    private void ShowDialog() {
        DialogViewPager dialogViewPager = new DialogViewPager();
        dialogViewPager.show(getFragmentManager(),"DialogViewPager");
    }
    

    DialogFragment

    public class DialogViewPager extends DialogFragment {
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.dialog_layout, container);
        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        return view;
    }
    
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        ViewPager viewPager = (ViewPager) getView().findViewById(R.id.view_pager);
        viewPager.setAdapter(new MyViewPagerAdapter(getChildFragmentManager()));
    }
    
    class MyViewPagerAdapter extends FragmentPagerAdapter {
    
        public MyViewPagerAdapter(FragmentManager fm) {
            super(fm);
        }
    
        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return FirstFragment.newInstance();
                case 1:
                    return SecondFragment.newInstance();
                default:
                    return null;
            }
        }
    
        @Override
        public int getCount() {
            return 2;
        }
      }
    }
    

    Первый Фрагмент

    второй фрагмент