Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对话框中的Viewpager?_Java_Android_Xml_Android Fragments_View - Fatal编程技术网

Java 对话框中的Viewpager?

Java 对话框中的Viewpager?,java,android,xml,android-fragments,view,Java,Android,Xml,Android Fragments,View,我正在尝试创建一个对话框,您可以单击“下一步”按钮向右滑动到下一个屏幕。我正在使用ViewPager和适配器执行此操作: final Dialog dialog = new Dialog(this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.voicedialog); dialog.setCanceledOnTouc

我正在尝试创建一个对话框,您可以单击“下一步”按钮向右滑动到下一个屏幕。我正在使用ViewPager和适配器执行此操作:

  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) findViewById(R.id.viewpager);
        pager.setAdapter(adapter);
但是,我得到了一个NullPointerException,表示
pager
为null。为什么会这样?以下是页面适配器类:

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;
        }
        return collection.findViewById(resId);
    }

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

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == arg1;
    }
}
以下是我的对话框布局:

<android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

让我知道如何避免这种情况

PS:视图寻呼机中的每个布局如下所示,只是差异文本:

<RelativeLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/voice2"
    xmlns:android="http://schemas.android.com/apk/res/android">

        <TextView
            android:text="Slide 1!"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/textView2"
            android:layout_gravity="center"
            android:textSize="50sp" />

    </RelativeLayout>

不使用枚举类 您应该在对话框中调用findViewById。因此,您必须在findViewById之前添加对话框

像这样,

ViewPager pager = (ViewPager) dialog.findViewById(R.id.viewpager);
在解决空指针异常后,另一个问题的解决方案在这里,如果你不使用枚举类,你可以使用下面的代码

MainActivity.java

package demo.com.pager;

import android.app.Dialog;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {


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

        btn= (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final Dialog dialog = new Dialog(MainActivity.this);
                dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                dialog.setContentView(R.layout.voicedialog);
                dialog.setCanceledOnTouchOutside(false);

                MyPageAdapter adapter = new MyPageAdapter(MainActivity.this);
                ViewPager pager = (ViewPager) dialog.findViewById(R.id.viewpager);
                pager.setAdapter(adapter);
                dialog.show();
            }
        });


    }
}
package demo.com.dialogdemo;

import android.app.Dialog; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.Window; import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    Button button;

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

        setupUIComponents();
        setupListeners();
    }

    private void setupUIComponents() {
        button = (Button) findViewById(R.id.button);
    }

    private void setupListeners() {
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final Dialog dialogItemDetails = new Dialog(MainActivity.this);
                dialogItemDetails.requestWindowFeature(Window.FEATURE_NO_TITLE);
                dialogItemDetails.setContentView(R.layout.dialoglayout);
                dialogItemDetails.getWindow().setBackgroundDrawable(
                        new ColorDrawable(Color.TRANSPARENT));

                ViewPager viewPager = (ViewPager) dialogItemDetails.findViewById(R.id.viewPagerItemImages);
                viewPager.setAdapter(new CustomPagerAdapter(MainActivity.this));
                dialogItemDetails.show();

            }
        });
    }

}
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="demo.com.pager.MainActivity">

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="dialog" />

</RelativeLayout>
FragmentBlue.java

package demo.com.pager;

import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import android.support.v4.app.Fragment;

public class FragmentBlue extends Fragment  {

    private static final String TAG = FragmentBlue.class.getSimpleName();

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

        View view = inflater.inflate(R.layout.fragment_blue, container, false);
        return view;
    }


}
fragment_blue.xml

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

</RelativeLayout>

voicedialog.xml

<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/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

请检查并回复。

使用枚举类 请尝试此代码,如果有任何疑问,请再次询问。很乐意帮忙

MainActivity.java

package demo.com.pager;

import android.app.Dialog;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {


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

        btn= (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final Dialog dialog = new Dialog(MainActivity.this);
                dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                dialog.setContentView(R.layout.voicedialog);
                dialog.setCanceledOnTouchOutside(false);

                MyPageAdapter adapter = new MyPageAdapter(MainActivity.this);
                ViewPager pager = (ViewPager) dialog.findViewById(R.id.viewpager);
                pager.setAdapter(adapter);
                dialog.show();
            }
        });


    }
}
package demo.com.dialogdemo;

import android.app.Dialog; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.Window; import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    Button button;

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

        setupUIComponents();
        setupListeners();
    }

    private void setupUIComponents() {
        button = (Button) findViewById(R.id.button);
    }

    private void setupListeners() {
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final Dialog dialogItemDetails = new Dialog(MainActivity.this);
                dialogItemDetails.requestWindowFeature(Window.FEATURE_NO_TITLE);
                dialogItemDetails.setContentView(R.layout.dialoglayout);
                dialogItemDetails.getWindow().setBackgroundDrawable(
                        new ColorDrawable(Color.TRANSPARENT));

                ViewPager viewPager = (ViewPager) dialogItemDetails.findViewById(R.id.viewPagerItemImages);
                viewPager.setAdapter(new CustomPagerAdapter(MainActivity.this));
                dialogItemDetails.show();

            }
        });
    }

}
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="demo.com.pager.MainActivity">

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="dialog" />

</RelativeLayout>
CustomPagerAdapter.java

package demo.com.pager;

import android.app.FragmentManager;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * Created by rucha on 26/12/16.
 */

public class MyPageAdapter extends PagerAdapter {

    Context mContext;
    int resId = 0;

    public MyPageAdapter(Context context) {
        mContext = context;
    }


    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;
        }

        return collection.findViewById(resId);*/

        LayoutInflater inflater = LayoutInflater.from(mContext);
        switch (position) {
            case 0:
                resId = R.layout.fragment_blue;
                break;
            case 1:
                resId = R.layout.fragment_pink;
                break;
        }
        ViewGroup layout = (ViewGroup) inflater.inflate(resId, collection, false);
        collection.addView(layout);
        return layout;
    }

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

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == arg1;
    }
}
package demo.com.dialogdemo;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * Created by rucha on 26/12/16.
 */

public class CustomPagerAdapter  extends PagerAdapter {

    private Context mContext;

    public CustomPagerAdapter(Context context) {
        mContext = context;
    }

    @Override
    public Object instantiateItem(ViewGroup collection, int position) {
        ModelObject1 modelObject = ModelObject1.values()[position];
        LayoutInflater inflater = LayoutInflater.from(mContext);
        ViewGroup layout = (ViewGroup) inflater.inflate(modelObject.getLayoutResId(), collection, false);
        collection.addView(layout);
        return layout;
    }

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

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

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        ModelObject1 customPagerEnum = ModelObject1.values()[position];
        return mContext.getString(customPagerEnum.getTitleResId());
    }

}
dailoglayout.xml

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

    <TextView
        android:id="@+id/txtHeaderTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:gravity="center"
        android:text="ITEM IMAGES"
        android:textStyle="bold" />

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

</RelativeLayout>

fragmentone.xml

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="one"/>

</LinearLayout>


发布您的布局xml@GurwinderSingh完成后,我已编辑了您应该在对话框中调用的问题
findViewById
。不在当前活动上。我认为您正在尝试在创建对话框之前绑定ViewPager。您应该在dialog的onCreate()方法之后绑定它。好的,我这样做了,但是现在对话框只是一个空屏幕,没有内容或滑动…没有任何布局(voice1或voice2)你在哪里夸大了你的布局?@RuchirBaronia我更新了答案检查答案并根据你的代码修改如果有任何疑问,请再次询问,如果你喜欢我的ans plz,请向上投票并接受。谢谢你。@RuchaBhatt,而不是发布另一个答案。您必须编辑您的第一个答案!否则版主或其他用户将被否决你的答案!我必须更换MyPageAdapter(MainActivity.this)通过
MyPageAdapter(getSupportFragmentManager())@RuchirBaronia这段代码你遇到了什么问题?@Piyus与其说代码很麻烦,不如说我想找到一种方法来修复我自己的代码,而不仅仅是复制另一个。我还认为没有必要使用Enum。除了使用Enum之外,这与我在问题中提供的几乎完全相同。我只是想弄清楚如何在
MyPageAdapter
中引用
instantiateItem
中的布局,因为我认为我的问题是我没有调用
collection.addView(布局),但我不知道如何获得
布局
对象。你或@Rucha知道吗?@RuchirBaronia enum根本没有必要,我告诉过你更新你的问题,让我们看看你现在做了什么。。好的,我明白了,你想在不使用enum的情况下扩大布局,这是你的问题吗?那么你可以检查@RuchirBaronia