简体   繁体   English

按钮单击后启动幻灯片放映ViewPager / PagerAdapter Android

[英]Initiate slideshow after Button Click ViewPager/PagerAdapter Android

I'm trying to start a slideshow once a start button is pressed. 按下开始按钮后,我正在尝试开始幻灯片播放。 I have seen a few examples using ViewPager and PagerAdapter on here, but none of them seem to help. 我在这里看到了一些使用ViewPager和PagerAdapter的示例,但它们似乎都无济于事。 My code is below. 我的代码如下。 When I press the start button, my logCat is saying there is a nullPointerException. 当我按下开始按钮时,我的logCat表示存在nullPointerException。

public class MainActivity extends Activity { 公共类MainActivity扩展了Activity {

private ViewPager mViewPager;
private SwipeAdapter adapter;

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

public void startShow(View v) {
    Toast toast = Toast.makeText(this, "Button was Clicked!", Toast.LENGTH_LONG);
    toast.show();
    mViewPager = (ViewPager) findViewById(R.id.pager);
    adapter = new SwipeAdapter(MainActivity.this);
    mViewPager.setAdapter(adapter);

}

private class SwipeAdapter extends PagerAdapter {

    private LayoutInflater mInflater;
    private int[] mLayouts = {R.layout.layout1, R.layout.layout2, R.layout.layout3, R.layout.layout4};

    public SwipeAdapter(Context context) {
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        ViewGroup pageView = (ViewGroup) mInflater.inflate(mLayouts[position],
                container, false);
        container.addView(pageView);
        getItemPosition(pageView);
        return pageView; 
    }

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

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

} }

My button contains an onClick attribute that works fine. 我的按钮包含一个正常工作的onClick属性。 My 4 layout files contain ImageViews that contain the 4 pictures for the slideshow (defined: R.layout.layout1, etc...). 我的4个布局文件包含ImageView,其中包含幻灯片显示的4张图片(定义为:R.layout.layout1,等等。)。 I have a pager xml file that simply defines the ViewPager. 我有一个简单地定义ViewPager的寻呼机xml文件。 Any suggestions? 有什么建议么?

You get NullPointerException because you are referencing pager which is not in activity_main.Place your ViewPager inside activity_main 之所以会收到NullPointerException,是因为您引用的是不在activity_main中的分页器。将ViewPager放在activity_main中

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

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

</LinearLayout> 

Better to move the instantiation of Views to onCreate from startShow() 最好将视图的实例从startShow()移动到onCreate

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mViewPager = (ViewPager) findViewById(R.id.pager);
    adapter = new SwipeAdapter(MainActivity.this);
    mViewPager.setAdapter(adapter);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM