java - 对话框内的 Viewpager 不起作用

标签 java android eclipse android-fragments android-studio

我正在使用下面的代码来显示一个带有 ViewPager 的对话框

 new Handler().postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
                TutorialAlerts alert = new TutorialAlerts(MainActivity.this, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen, TutorialAlerts.TUTORIAL_ALERT_INITIAL);
                alert.show();
            }
        }, 3000);

import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.TextView;

import com.iyedah.weping.R;
import com.iyedah.weping.fragments.TutorialFragment;
import com.viewpagerindicator.CirclePageIndicator;

import java.util.ArrayList;

public class TutorialAlerts extends Dialog
{
    public ArrayList<TutorialFragment> fragments = new ArrayList<TutorialFragment>();

    private int type = TUTORIAL_ALERT_CHAT;

    public static final int TUTORIAL_ALERT_CHAT     = 0;
    public static final int TUTORIAL_ALERT_MAP      = 1;
    public static final int TUTORIAL_ALERT_INITIAL  = 2;
    public static final int TUTORIAL_ALERT_MESSAGE  = 3;

    private CirclePageIndicator cirleIndicator;
    private ViewPager pager;
    private FragmentActivity mContext;

    private TextView nextBtn;
    private TextView title;

    private PagerAdapter adapter;

    public TutorialAlerts(FragmentActivity context, int theme, int type)
    {
        super(context, theme);
        this.mContext = context;
        this.type = type;
    }

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

        nextBtn = (TextView) this.findViewById(R.id.nextBtn);
        title   = (TextView) findViewById(R.id.title);

        pager = (ViewPager) findViewById(R.id.pager);
        pager.setOnPageChangeListener(mPageChangeListener);

        cirleIndicator = (CirclePageIndicator) findViewById(R.id.cirleIndicator);
        if (type == TUTORIAL_ALERT_INITIAL)
        {
            title.setText("Getting started");

            TutorialFragment page1 = new TutorialFragment();
            Bundle bundle = new Bundle();
            bundle.putInt("pageNumber", 1);
            page1.setArguments(bundle);
            fragments.add(page1);

            TutorialFragment page2 = new TutorialFragment();
            bundle = new Bundle();
            bundle.putInt("pageNumber", 2);
            page2.setArguments(bundle);
            fragments.add(page2);

            TutorialFragment page3 = new TutorialFragment();
            bundle = new Bundle();
            bundle.putInt("pageNumber", 3);
            page3.setArguments(bundle);
            fragments.add(page3);
        }

        adapter = new MyPagerAdapter(mContext.getSupportFragmentManager());
    }


    @Override
    public void show()
    {
        super.show();
        pager.setAdapter(adapter);
        cirleIndicator.setViewPager(pager);
        pager.setCurrentItem(0, true);
    }

    /************************************************************************
     *
     *
     **********************************************************************/
    public class MyPagerAdapter extends FragmentPagerAdapter
    {
        public MyPagerAdapter(FragmentManager fm)
        {
            super(fm);
        }

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

        @Override
        public int getCount()
        {
            return fragments.size();
        }

        @Override
        public Fragment getItem(int position)
        {
            return fragments.get(position);
        }
    }

    private ViewPager.OnPageChangeListener mPageChangeListener = new ViewPager.OnPageChangeListener()
    {
        @Override
        public void onPageSelected(final int position)
        {
            fragments.get(position).setupInitialTutorial(position + 1);
            if(position == fragments.size())
            {
                nextBtn.setText("Done");
                nextBtn.setOnClickListener(new View.OnClickListener()
                {
                    @Override
                    public void onClick(View v)
                    {
                        dismiss();
                    }
                });
            }
            else
            {
                nextBtn.setText("Next");
                nextBtn.setOnClickListener(new View.OnClickListener()
                {
                    @Override
                    public void onClick(View v)
                    {
                        pager.setCurrentItem(position + 1, true);
                    }
                });
            }
        }

        @Override
        public void onPageScrolled(int position, float arg1, int arg2)
        {
        }

        @Override
        public void onPageScrollStateChanged(int arg0)
        {
        }
    };
}


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#C8000000"
 >

    <TextView
        android:layout_marginTop="20dp"
        android:gravity="center"
        android:textStyle="bold"
        android:textSize="23sp"
        android:textColor="@color/green"
        android:text="@string/use_app"
        android:layout_width="match_parent"
        android:layout_height="58dp"
        android:layout_centerHorizontal="true"
        android:adjustViewBounds="true"
        android:id="@+id/title"/>

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_above="@+id/nextBtn"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />


    <com.viewpagerindicator.CirclePageIndicator
        android:layout_centerHorizontal="true"
        android:id="@+id/cirleIndicator"
        android:layout_marginBottom="10dp"
        android:layout_above="@+id/nextBtn"
        android:layout_height="40dp"
        android:layout_width="60dp" />



    <TextView
        android:gravity="center"
        android:textStyle="bold"
        android:textSize="20sp"
        android:layout_alignParentBottom="true"
        android:background="@color/mild_black"
        android:id="@+id/nextBtn"
        android:textColor="@color/green"
        android:text="@string/next"
        android:layout_width="match_parent"
        android:layout_height="58dp"
        android:layout_centerHorizontal="true"
        android:adjustViewBounds="true"
        />


</RelativeLayout>

Dialog 显示正常,但 viewPager 似乎是不可见的,什么也没显示。

最佳答案

我已经扩展了 dialogfragment 类并创建了新的自定义对话框

public class CustomDailog extends DialogFragment {

private View view;

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

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.addon_dialog, container);

    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
    getDialog().setCancelable(true);
    getDialog().getWindow().setGravity(Gravity.TOP);

    return view;
}

@Override
public void onActivityCreated(Bundle arg0) {
    super.onActivityCreated(arg0);

    DisplayMetrics metrics = getResources().getDisplayMetrics();
    int screenWidth = (int) (metrics.widthPixels * 0.95);
    int screenHeight = (int) (metrics.heightPixels * 0.95);

    getDialog().getWindow().setLayout(screenWidth, screenHeight);

    android.support.v4.view.ViewPager addonsviewpager = (android.support.v4.view.ViewPager) view.findViewById(R.id.addonsviewpager);
}

插件对话框.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/addonsviewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/transparent">
    </android.support.v4.view.ViewPager>

 </RelativeLayout>

并在您的代码中将此对话框用作...

CustomDailog customDailog=new CustomDailog ();
customDailog.show(getFragmentManager(),"addons_fragment");  

关于java - 对话框内的 Viewpager 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30568521/

相关文章:

java - actionPerformed() 在调整 JFrame 大小后执行多次

java - 将 PHP 加密代码转换为 Java 显示错误?

java - 我可以在 HTML 中插入一些代码来设置 Android 壁纸吗

android-如何在谷歌地图上将标记的位置显示为地址

java - 创建一个 JSON 对象

android - 如何在真实设备上模拟来电?

java - 当我的 j2ee eclipse 上安装了 tomcat 服务器时,是否需要额外的组件来配置 EJB?

java - 使用 Selenium,是否有另一种更可靠的方法在 Headless Chrome 中的元素上使用单击命令?

java - Eclipse 调试器指向源代码中的错误行

java - eclipse 赫利俄斯 : Java EE Perspective: How to have jars added to build path under one hood like referenced library