关于ViewPager+GridView,实现GridView横向水平滑动的的问题

在网上看了好多DEMO效果都不是想要的然后发现了这个例子下面贴出来

package com.example.bmvod.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;

public class MainActivity extends Activity {
private LinearLayout linear01;
private LinearLayout linear02;
private List> listView;
private int next = 0;
private ViewPager adViewPager;
private AdPageAdapter adapter;
private ImageView[] imageViews;
private ImageView imageView;
private AtomicInteger atomicInteger = new AtomicInteger(0);
private boolean isContinue = true;
private List gridViewlist = new ArrayList();

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

private void initView() {
    System.out.println("initView()");
    linear01 = (LinearLayout) findViewById(R.id.view_pager_content);
    linear02 = (LinearLayout) findViewById(R.id.viewGroup);
    listView = new ArrayList<Map<String, Object>>();
    //创建ViewPager
    adViewPager = new ViewPager(this);

    //获取屏幕像素相关信息
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);

    //根据屏幕信息设置ViewPager广告容器的宽高
    //adViewPager.setLayoutParams(new LayoutParams(dm.widthPixels, dm.heightPixels));

    //将ViewPager容器设置到布局文件父容器中
    linear01.addView(adViewPager);

    getView();

    initCirclePoint();

    adViewPager.setAdapter(adapter);
    adViewPager.addOnPageChangeListener(new AdPageChangeListener());

}

/**
 * ViewPager 页面改变监听器
 */
private final class AdPageChangeListener implements OnPageChangeListener {

    /**
     * 页面滚动状态发生改变的时候触发
     */
    @Override
    public void onPageScrollStateChanged(int arg0) {
    }

    /**
     * 页面滚动的时候触发
     */
    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
    }

    /**
     * 页面选中的时候触发
     */
    @Override
    public void onPageSelected(int arg0) {
        //获取当前显示的页面是哪个页面
        System.out.println("onPageSelected");
        atomicInteger.getAndSet(arg0);
        //重新设置原点布局集合
        for (int i = 0; i < imageViews.length; i++) {
            imageViews[arg0].setBackgroundResource(R.drawable.point_focused);
            if (arg0 != i) {
                imageViews[i].setBackgroundResource(R.drawable.point_unfocused);
            }
        }
    }
}

private void initCirclePoint() {
    System.out.println("initCirclePoint()");
    imageViews = new ImageView[gridViewlist.size()];
    //广告栏的小圆点图标
    for (int i = 0; i < gridViewlist.size(); i++) {
        //创建一个ImageView, 并设置宽高. 将该对象放入到数组中
        imageView = new ImageView(this);
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT);
        layoutParams.setMargins(10, 0, 10, 0);
        imageView.setLayoutParams(layoutParams);
        imageViews[i] = imageView;

        //初始值, 默认第0个选中
        if (i == 0) {
            imageViews[i].setBackgroundResource(R.drawable.point_focused);
        } else {
            imageViews[i].setBackgroundResource(R.drawable.point_unfocused);
        }
        //将小圆点放入到布局中
        linear02.addView(imageViews[i]);

    }
}

private void getView() {

    int[] intView = {R.drawable.one, R.drawable.two, R.drawable.three, R.drawable.four, R.drawable.five, R.drawable.six, R.drawable.seven, R.drawable.eight, R.drawable.nine, R.drawable.ten
            , R.drawable.eleven, R.drawable.twelve, R.drawable.thirteen, R.drawable.fourteen, R.drawable.fifteen, R.drawable.sixteen, R.drawable.seventeen};
    for (int i = 0; i < intView.length; i++) {
        Map<String, Object> mapView = new HashMap<String, Object>();
        mapView.put("image", intView[i]);
        listView.add(mapView);
    }
    getGridView();
}

private void getGridView() {
    boolean bool = true;
    while (bool) {
        int result = next + 9;
        if (listView.size() != 0 && result < listView.size()) {
            GridView gridView = new GridView(this);
            gridView.setNumColumns(5);
            gridView.setVerticalSpacing(30);
            gridView.setHorizontalSpacing(0);
            List<Map<String, Object>> gridlist = new ArrayList<Map<String, Object>>();
            for (int i = next; i < result; i++) {
                gridlist.add(listView.get(i));

            }
            MyAdapter myAdapter = new MyAdapter(gridlist);
            gridView.setAdapter(myAdapter);
            next = result;
            gridViewlist.add(gridView);

        } else if (result - listView.size() <= 9) {
            System.out.println("剩余多少" + (result - listView.size()));
            List<Map<String, Object>> gridlist = new ArrayList<Map<String, Object>>();
            for (int i = next; i < listView.size(); i++) {
                gridlist.add(listView.get(i));
            }
            GridView gridView = new GridView(this);
            gridView.setNumColumns(5);
            MyAdapter myAdapter = new MyAdapter(gridlist);
            gridView.setAdapter(myAdapter);
            next = listView.size() - 1;
            gridViewlist.add(gridView);
            bool = false;
        } else {
            bool = false;
        }
    }
    adapter = new AdPageAdapter(gridViewlist);
}

private final class AdPageAdapter extends PagerAdapter {
    private List<View> views = null;

    /**
     * 初始化数据源, 即View数组
     */
    public AdPageAdapter(List<View> views) {
        this.views = views;
    }

    /**
     * 从ViewPager中删除集合中对应索引的View对象
     */

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

    /**
     * 获取ViewPager的个数
     */
    @Override
    public int getCount() {
        return views.size();
    }

    /**
     * 从View集合中获取对应索引的元素, 并添加到ViewPager中
     */
    @Override
    public Object instantiateItem(View container, final int position) {
        ((ViewPager) container).addView(views.get(position), 0);

// views.get(position).setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View v) {
// System.out.println("position"+position);
// Intent intent=new Intent(MainActivity.this,OtherViewPage.class);
// MainActivity.this.startActivity(intent);
// }
// });
return views.get(position);
}

    /**
     * 是否将显示的ViewPager页面与instantiateItem返回的对象进行关联
     * 这个方法是必须实现的
     */
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }
}

private class MyAdapter extends BaseAdapter {
    List<Map<String, Object>> listgrid;

    private MyAdapter(List<Map<String, Object>> listgrid) {
        this.listgrid = listgrid;
    }

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

    @Override
    public Object getItem(int position) {
        return listgrid.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = getLayoutInflater().inflate(R.layout.grid_view_item, null);
        ImageView getViewLinear = (ImageView) convertView.findViewById(R.id.getViewLinear);
        getViewLinear.setBackgroundResource(Integer.parseInt(listgrid.get(position).get("image").toString()));
        return convertView;
    }

}

}


只有两个布局文件一个只有上下两个布局里面的ViewPager和小圆点都写在代码里,另一个就是GRIDVIEW的ITEM 经过测试 gridView.setVerticalSpacing(30);只对当前页有效 翻到第二页上下两个图片间距为0,,,gridView.setHorizontalSpacing(5);无效!求解啊!!!!!

2个回答

gridView.setVerticalSpacing(30)要设置两边 因为有两页 这个问题已经发现了 可gridView.setHorizontalSpacing(5);依旧无效!

这个代码有点复杂,比较乱,建议自己做封装,gradView的效果的话,可以结合stretchMode分析下,这个会影响VSpace和HSpace,是gridview的排版策略,其实主要的问题应该就是gridView这块使用的不熟练

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于ViewPager+GridView,实现GridView横向水平滑动的的问题

在网上看了好多DEMO效果都不是想要的然后发现了这个例子下面贴出来 package com.example.bmvod.myapplication; import android.app.Activity; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; public class MainActivity extends Activity { private LinearLayout linear01; private LinearLayout linear02; private List<Map<String, Object>> listView; private int next = 0; private ViewPager adViewPager; private AdPageAdapter adapter; private ImageView[] imageViews; private ImageView imageView; private AtomicInteger atomicInteger = new AtomicInteger(0); private boolean isContinue = true; private List<View> gridViewlist = new ArrayList<View>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { System.out.println("initView()"); linear01 = (LinearLayout) findViewById(R.id.view_pager_content); linear02 = (LinearLayout) findViewById(R.id.viewGroup); listView = new ArrayList<Map<String, Object>>(); //创建ViewPager adViewPager = new ViewPager(this); //获取屏幕像素相关信息 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); //根据屏幕信息设置ViewPager广告容器的宽高 //adViewPager.setLayoutParams(new LayoutParams(dm.widthPixels, dm.heightPixels)); //将ViewPager容器设置到布局文件父容器中 linear01.addView(adViewPager); getView(); initCirclePoint(); adViewPager.setAdapter(adapter); adViewPager.addOnPageChangeListener(new AdPageChangeListener()); } /** * ViewPager 页面改变监听器 */ private final class AdPageChangeListener implements OnPageChangeListener { /** * 页面滚动状态发生改变的时候触发 */ @Override public void onPageScrollStateChanged(int arg0) { } /** * 页面滚动的时候触发 */ @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } /** * 页面选中的时候触发 */ @Override public void onPageSelected(int arg0) { //获取当前显示的页面是哪个页面 System.out.println("onPageSelected"); atomicInteger.getAndSet(arg0); //重新设置原点布局集合 for (int i = 0; i < imageViews.length; i++) { imageViews[arg0].setBackgroundResource(R.drawable.point_focused); if (arg0 != i) { imageViews[i].setBackgroundResource(R.drawable.point_unfocused); } } } } private void initCirclePoint() { System.out.println("initCirclePoint()"); imageViews = new ImageView[gridViewlist.size()]; //广告栏的小圆点图标 for (int i = 0; i < gridViewlist.size(); i++) { //创建一个ImageView, 并设置宽高. 将该对象放入到数组中 imageView = new ImageView(this); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT); layoutParams.setMargins(10, 0, 10, 0); imageView.setLayoutParams(layoutParams); imageViews[i] = imageView; //初始值, 默认第0个选中 if (i == 0) { imageViews[i].setBackgroundResource(R.drawable.point_focused); } else { imageViews[i].setBackgroundResource(R.drawable.point_unfocused); } //将小圆点放入到布局中 linear02.addView(imageViews[i]); } } private void getView() { int[] intView = {R.drawable.one, R.drawable.two, R.drawable.three, R.drawable.four, R.drawable.five, R.drawable.six, R.drawable.seven, R.drawable.eight, R.drawable.nine, R.drawable.ten , R.drawable.eleven, R.drawable.twelve, R.drawable.thirteen, R.drawable.fourteen, R.drawable.fifteen, R.drawable.sixteen, R.drawable.seventeen}; for (int i = 0; i < intView.length; i++) { Map<String, Object> mapView = new HashMap<String, Object>(); mapView.put("image", intView[i]); listView.add(mapView); } getGridView(); } private void getGridView() { boolean bool = true; while (bool) { int result = next + 9; if (listView.size() != 0 && result < listView.size()) { GridView gridView = new GridView(this); gridView.setNumColumns(5); gridView.setVerticalSpacing(30); gridView.setHorizontalSpacing(0); List<Map<String, Object>> gridlist = new ArrayList<Map<String, Object>>(); for (int i = next; i < result; i++) { gridlist.add(listView.get(i)); } MyAdapter myAdapter = new MyAdapter(gridlist); gridView.setAdapter(myAdapter); next = result; gridViewlist.add(gridView); } else if (result - listView.size() <= 9) { System.out.println("剩余多少" + (result - listView.size())); List<Map<String, Object>> gridlist = new ArrayList<Map<String, Object>>(); for (int i = next; i < listView.size(); i++) { gridlist.add(listView.get(i)); } GridView gridView = new GridView(this); gridView.setNumColumns(5); MyAdapter myAdapter = new MyAdapter(gridlist); gridView.setAdapter(myAdapter); next = listView.size() - 1; gridViewlist.add(gridView); bool = false; } else { bool = false; } } adapter = new AdPageAdapter(gridViewlist); } private final class AdPageAdapter extends PagerAdapter { private List<View> views = null; /** * 初始化数据源, 即View数组 */ public AdPageAdapter(List<View> views) { this.views = views; } /** * 从ViewPager中删除集合中对应索引的View对象 */ @Override public void destroyItem(View container, int position, Object object) { ((ViewPager) container).removeView(views.get(position)); } /** * 获取ViewPager的个数 */ @Override public int getCount() { return views.size(); } /** * 从View集合中获取对应索引的元素, 并添加到ViewPager中 */ @Override public Object instantiateItem(View container, final int position) { ((ViewPager) container).addView(views.get(position), 0); // views.get(position).setOnClickListener(new OnClickListener() { // // @Override // public void onClick(View v) { // System.out.println("position"+position); // Intent intent=new Intent(MainActivity.this,OtherViewPage.class); // MainActivity.this.startActivity(intent); // } // }); return views.get(position); } /** * 是否将显示的ViewPager页面与instantiateItem返回的对象进行关联 * 这个方法是必须实现的 */ @Override public boolean isViewFromObject(View view, Object object) { return view == object; } } private class MyAdapter extends BaseAdapter { List<Map<String, Object>> listgrid; private MyAdapter(List<Map<String, Object>> listgrid) { this.listgrid = listgrid; } @Override public int getCount() { return listgrid.size(); } @Override public Object getItem(int position) { return listgrid.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView = getLayoutInflater().inflate(R.layout.grid_view_item, null); ImageView getViewLinear = (ImageView) convertView.findViewById(R.id.getViewLinear); getViewLinear.setBackgroundResource(Integer.parseInt(listgrid.get(position).get("image").toString())); return convertView; } } } ``` ``` 只有两个布局文件一个只有上下两个布局里面的ViewPager和小圆点都写在代码里,另一个就是GRIDVIEW的ITEM 经过测试 gridView.setVerticalSpacing(30);只对当前页有效 翻到第二页上下两个图片间距为0,,,gridView.setHorizontalSpacing(5);无效!求解啊!!!!!

如何解决ViewPager+Fragment+GridView实现无限滑动时页面切换的卡顿问题?

最近想自己写一个日历组件,思路是使用ViewPager+Fragment+GridView,如图 (https://img-ask.csdn.net/upload/201902/27/1551263494_687583.png) 最外层是一个DialogFragment 如果正常滑动,没有任何问题,但在快速滑动的时候,在滑到Fragment1和4时进行setCurrentItem时,会发生卡顿现象,即没有即时跳转导致已达到边界无法继续滑动的情况 慢滑 (https://img-ask.csdn.net/upload/201902/27/1551269528_523451.gif) 快滑 (https://img-ask.csdn.net/upload/201902/27/1551269556_845553.gif) 我自己尝试过的解决办法: 1. 一开始我以为是Fragment中布局过于复杂,导致在刷新数据时卡顿,但即时我去掉Fragment中的所有布局,仍会发生卡顿现象 2.后来我将问题定位在ViewPager的事件分发上,将ViewPager的自定义,将onInterceptTouchEvent方法复写直接返回true,现象消失,滑动无问题,但由于GridView中需要响应点击事件,所以我又做了事件拦截的判断,但无论怎么判断,只要不直接返回true,该现象就会发生 下面贴上我的部分代码: 1. 我在DialogFragment中为ViewPager绑定监听事件,在onPageScrollStateChanged中判断页面是否跳转,在页面滑到最左最右时进行跳转 ``` //滑动状态监听 override fun onPageScrollStateChanged(p0: Int) { //1时表示正在滑动、2时表示滑动完毕、0时什么都没做,滑动时变化顺序为1>2>0 //在0时设置页面位置互换 if (p0 == 0){ position = calViewPager.currentItem when (position) { 0 -> { //到达最左侧Fragment时,刷新倒数第二个Fragment的数据与其保持一致,然后跳转,刷新部分代码省略 calViewPager.setCurrentItem(2, false) //跳转完成后刷新其余页面,代码省略 } 3 -> { //到达最右侧Fragment时,刷新第二个Fragment的数据与其保持一致,然后跳转,刷新部分代码省略 calViewPager.setCurrentItem(1, false) //跳转完成后刷新其余页面,代码省略 } 2 -> { //数据刷新,代码省略 } 1 -> { //数据刷新,代码省略 } } } } ``` 2.自定义了ViewPager,进行了事件拦截处理 ``` private var xPosition:Float? = null // 滑动点击判断、拦截 override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean { val res = super.onInterceptTouchEvent(ev) xPosition = if (ev!!.action == MotionEvent.ACTION_DOWN){ ev.x }else{ if (Math.abs(ev.x - xPosition!!) > 0){ return true }else{ ev.x } } return res } ``` 3.ViewPager的Adapter ``` class MyCalendarViewPagerAdapter(fm: FragmentManager, private var fragmentsList:MutableList<Fragment>): FragmentPagerAdapter(fm){ //Fragment个数 override fun getCount(): Int { return fragmentsList.size } override fun getItem(p0: Int): Fragment { return fragmentsList[p0] } //不销毁Item override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { } override fun getItemPosition(`object`: Any): Int { return PagerAdapter.POSITION_NONE } } ``` 4.在Fragment中是使用回调进行的数据更新,代码就不上了 这个问题已经困扰我两周了 求大佬指点

关于ViewPager+GridView 的问题 求帮看一下代码

package com.example.bmvod.myapplication; import android.app.Activity; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.Gravity; import android.view.View; import android.widget.AdapterView; import android.widget.GridView; import android.widget.Toast; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainActivity extends Activity { private MyViewPagerAdapter adapter; private List<GridView> mLists; private ViewPager mViewPager; private int[] ImagedId = new int[]{R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image1 , R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image1 , R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image1 , R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image1 , R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image1 , R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image1}; private String[] mStrs = new String[]{"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30" }; List<Map<String, Object>> ListItems = new ArrayList<Map<String, Object>>(); private int index = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* for (int i = 0; i < ImagedId.length; i++) { Map<String, Object> map = new HashMap<String, Object>(); map.put("image", R.drawable.image1); map.put("title", ImagedId[i]); ListItems.add(map); }*/ /* for (int i = 0; i < ImagedId.length; i++) { Map<String, Object> map = new HashMap<String, Object>(); map.put("image", ImagedId[i]); map.put("title",mStrs[i]); ListItems.add(map); }*/ init(); mViewPager = (ViewPager) findViewById(R.id.myviewpager); mViewPager.addOnPageChangeListener(new MyOnPageChanger()); adapter = new MyViewPagerAdapter(this, mLists); mViewPager.setAdapter(adapter); } public void init() { /* final int PageCount = (int) Math.ceil(mStrs.length / 28.0f);*/ final int PageCount = (int) Math.ceil(ImagedId.length / 28.0f); mLists = new ArrayList<GridView>(); for (int i = 0; i < PageCount; i++) { GridView gv = new GridView(this); /* gv.setAdapter(new MyGridViewAdapter(this, ImagedId, i));*/ //gv.setAdapter(new MyGridViewAdapter(this,mStrs,ImagedId[i])); gv.setGravity(Gravity.CENTER); gv.setClickable(true); gv.setFocusable(true); gv.setNumColumns(4); mLists.add(gv); } } /** * ViewPager页面选项卡进行切换时候的监听器处理 * * @author jiangqingqing */ class MyOnPageChanger implements ViewPager.OnPageChangeListener { @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { index = arg0; Log.i("jiangqq", "当前在第" + index + "页"); } } } ``` ``` 源码只显示了数字并没有图片 请问要怎么写才能把图片和TEXTVIEW结合起来? 要怎么样才能只显示图片呢?求大神指导啊,还是没能很好的理解。。。

关于viewpager实现左右滑动到问题

在最后一张图向右继续滑动时,跳转到第一张图片 ``` picture_viewpager.setAdapter(new PagerAdapter() { @Override public int getCount() { return pictureList.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(pictureList.get(position)); return pictureList.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }); picture_viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if (position==5&&positionOffset==0) { picture_viewpager.setCurrentItem(1,false); } } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } }); ``` 程序运行时,每次都会停止工作,是不是跟viewpager只能缓存3个页面有关,还是其他什么原因,该怎么解决

【Android】ViewPager+GridView结合使用报错?

首先声明下程序是可运行的代码,运用一个initViewPager();方法初始化ViewPager和GridView。我想把初始化GridView初始化放在initGridView中该如何写这部分代码。因为XML文件无错所以就不上了,JAVA代码如下。 ``` public class MainActivity extends Activity { private View tab01 = null; private View tab02 = null; private ViewPager mViewPager = null; private List<View> tabList = null; private PagerAdapter mAdapter = null; private GridView mGridView = null; private List<Map<String,Object>> mData = new ArrayList<Map<String,Object>>(); private SimpleAdapter gAdapter = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViewPager(); // initGridView(); } private void initGridView() { } private List<Map<String, Object>> getData() { int[] image = {R.drawable.icon_cloudday,R.drawable.icon_fog, R.drawable.icon_rain,R.drawable.icon_snow,R.drawable.icon_sunnyday}; String[] name = {"图一","图二","图三","图四","图五"}; for(int i=0;i<name.length;i++){ Map<String,Object> map = new HashMap<String,Object>(); map.put("image", image[i]); map.put("name", name[i]); mData.add(map); } return mData; } private void initViewPager() { this.mViewPager = (ViewPager) findViewById(R.id.mViewPager); LayoutInflater mInlfater = getLayoutInflater(); this.tab01 = mInlfater.inflate(R.layout.tab01, null); this.tab02 = mInlfater.inflate(R.layout.tab02, null); this.tabList = new ArrayList<View>(); tabList.add(tab01); tabList.add(tab02); mAdapter = new PagerAdapter() { @Override public boolean isViewFromObject(View arg0, Object arg1) { // TODO Auto-generated method stub return arg0 == arg1; } @Override public int getCount() { // TODO Auto-generated method stub return tabList.size(); } @Override public void destroyItem(ViewGroup container, int position, Object object) { // TODO Auto-generated method stub container.removeView(tabList.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { // TODO Auto-generated method stub container.addView(tabList.get(position)); return tabList.get(position); } }; mViewPager.setAdapter(mAdapter); //--------↓ this.mGridView = (GridView)tab02.findViewById(R.id.mGridView); this.gAdapter = new SimpleAdapter(this, getData(),R.layout.griditem, new String[] {"image","name"},new int[] {R.id.image,R.id.name}); this.mGridView.setAdapter(gAdapter); //--------↑ //以上代码是否可以放在initGridView()中实现,有待考证。 } } ``` 如代码所示

viewpager嵌套viewpager父vp禁止左右滑动

viewpager嵌套viewpager如何让父viewpager禁止左右滑动,子viewpager正常滑动

Fragment中嵌套ViewPager,ViewPager中有好几个Fragment实现滑动

Fragment中嵌套ViewPager,ViewPager中有好几个Fragment实现滑动,其中一个Fragment中有照相功能。在Activity中的拍照实现很简单,但是在Fragment中实现拍照,尤其是多层嵌套下的Fragment中更不好实现。 我这个是FragmentActivity中使用TabHostFragment实现底部菜单,包含Afragment、Bfragment、Cfragment、Dfragment. Afragment中中嵌套ViewPager,ViewPager中有好几个Fragment实现滑动,fragment1、fragment2、fragment3、、、、,其中fragment1 中有一个按钮调用摄像头拍照,最后把照片放到ImageView中。 fragment1中的onActivityResult()方法根本就不走,而走了FragmentActivity中的onActivityResult()。 怎么实现我想要的效果呢,请大家帮我一下,给点建议也好。。。

ViewPager中GridView 其中一页删除一项,滑动ViewPager就崩溃,求帮助

ViewPager中GridView 其中一页删除一项,滑动ViewPager就崩溃,求帮助 下面是错误日志: 08-11 16:12:29.663: E/AndroidRuntime(5234): java.util.ConcurrentModificationException 08-11 16:12:29.663: E/AndroidRuntime(5234): at java.util.AbstractList$SubAbstractList.size(AbstractList.java:360) 08-11 16:12:29.663: E/AndroidRuntime(5234): at com.example.launcherdemo.AppsAdapter.getCount(AppsAdapter.java:86) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.GridView.onMeasure(GridView.java:1037) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.View.measure(View.java:15604) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1381) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.View.measure(View.java:15604) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4918) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1411) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1059) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.LinearLayout.onMeasure(LinearLayout.java:590) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.View.measure(View.java:15604) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.SlidingDrawer.onMeasure(SlidingDrawer.java:275) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.View.measure(View.java:15604) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:645) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:425) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.View.measure(View.java:15604) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4918) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.View.measure(View.java:15604) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4918) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1411) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.LinearLayout.measureVertical(LinearLayout.java:698) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.View.measure(View.java:15604) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4918) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 08-11 16:12:29.663: E/AndroidRuntime(5234): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2198) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.View.measure(View.java:15604) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2165) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1249) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1443) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1139) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4879) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.Choreographer.doCallbacks(Choreographer.java:579) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.Choreographer.doFrame(Choreographer.java:548) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.os.Handler.handleCallback(Handler.java:725) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.os.Handler.dispatchMessage(Handler.java:92) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.os.Looper.loop(Looper.java:153) 08-11 16:12:29.663: E/AndroidRuntime(5234): at android.app.ActivityThread.main(ActivityThread.java:5523) 08-11 16:12:29.663: E/AndroidRuntime(5234): at java.lang.reflect.Method.invokeNative(Native Method) 08-11 16:12:29.663: E/AndroidRuntime(5234): at java.lang.reflect.Method.invoke(Method.java:511) 08-11 16:12:29.663: E/AndroidRuntime(5234): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:835) 08-11 16:12:29.663: E/AndroidRuntime(5234): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 08-11 16:12:29.663: E/AndroidRuntime(5234): at dalvik.system.NativeStart.main(Native Method)

控制ViewPager滑动问题

ViewPager中嵌套一个ViewPager还有ListView,如何能保证子ViewPager可以左右滑动,但是父ViewPager不可以滑动?

关于ViewPager的无限循环

最近学习了viewPager的用法,但是发现当手动滑动viewPager时无法实现无限循环,网上百度了一下,大家都是用的通过设置count的长度为一个很大的值,比如Integer.MAX_VALUE,再用取余的方法去添加view,老师也是这样讲的,但这样并没有达到理论上的无限循环,而且如果我在页面添加一组RadioButton来跳转到对应页面的话也会报错,所以自己想了一下,用另一种方法来实现了真正的无限循环和添加RadioButton,大家看看代码给点意见,我这样是否有不妥 Java代码: package com.example.android_viewpager; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.R.integer; import android.app.Activity; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Toast; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.TextView; public class MainActivity extends Activity { private ViewPager viewPager; private int[] ImageId; private LinkedList<ImageView> list; private ImageView imageView; private TextView textView; private Handler handler; private boolean flag = true; private MyAdapter myAdapter; private Map<ImageView, String> textmap; private Map<ImageView, RadioButton> rbmap; private Map<RadioButton, ImageView> rbmap1; private RadioGroup rg; private RadioButton rb1, rb2, rb3, rb4, rb5; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = (ViewPager) findViewById(R.id.vp); textView = (TextView) findViewById(R.id.text); rg = (RadioGroup) findViewById(R.id.rg); rb1 = (RadioButton) findViewById(R.id.rb1); rb2 = (RadioButton) findViewById(R.id.rb2); rb3 = (RadioButton) findViewById(R.id.rb3); rb4 = (RadioButton) findViewById(R.id.rb4); rb5 = (RadioButton) findViewById(R.id.rb5); ImageId = getImageId(); list = getImageView(); textmap = getText(); rbmap = getRadioButton(); rbmap1 = getRadioButton1(); rb3.setChecked(true); textView.setText(textmap.get(list.get(2))); myAdapter = new MyAdapter(); viewPager.setAdapter(myAdapter); viewPager.setOnPageChangeListener(new MyOnClick()); viewPager.setCurrentItem(2); rg.setOnCheckedChangeListener(new MyOnChangeLister()); // isHandler(); // handler.sendEmptyMessageDelayed(0, 2000); } class MyOnChangeLister implements OnCheckedChangeListener{ @Override public void onCheckedChanged(RadioGroup group, int checkedId) { int indexOf; switch (checkedId) { case R.id.rb1: indexOf = list.indexOf(rbmap1.get(rb1)); viewPager.setCurrentItem(indexOf); break; case R.id.rb2: indexOf = list.indexOf(rbmap1.get(rb2)); viewPager.setCurrentItem(indexOf); break; case R.id.rb3: indexOf = list.indexOf(rbmap1.get(rb3)); viewPager.setCurrentItem(indexOf); break; case R.id.rb4: indexOf = list.indexOf(rbmap1.get(rb4)); viewPager.setCurrentItem(indexOf); break; case R.id.rb5: indexOf = list.indexOf(rbmap1.get(rb5)); viewPager.setCurrentItem(indexOf); break; default: break; } } } private Map<RadioButton, ImageView> getRadioButton1() { Map<RadioButton, ImageView> map = new HashMap<RadioButton, ImageView>(); map.put(rb1, list.get(0)); map.put(rb2, list.get(1)); map.put(rb3, list.get(2)); map.put(rb4, list.get(3)); map.put(rb5, list.get(4)); return map; } private Map<ImageView, RadioButton> getRadioButton() { Map<ImageView, RadioButton> map = new HashMap<ImageView, RadioButton>(); map.put(list.get(0), rb1); map.put(list.get(1), rb2); map.put(list.get(2), rb3); map.put(list.get(3), rb4); map.put(list.get(4), rb5); return map; } // private void isHandler() { // handler = new Handler() { // // @Override // public void handleMessage(Message msg) { // viewPager.setCurrentItem(viewPager.getCurrentItem() + 1); // if (flag) { // sendEmptyMessageDelayed(0, 2000); // } // // } // }; // // } @Override protected void onDestroy() { flag = false; super.onDestroy(); } class MyOnClick implements OnPageChangeListener { @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int position) { textView.setText(textmap.get(list.get(position))); RadioButton radioButton = rbmap.get(list.get(position)); radioBtn(); radioButton.setBackgroundResource(R.drawable.b); getImageView2(position); } } class MyAdapter extends PagerAdapter { public int getCount() { return list.size(); } public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public Object instantiateItem(ViewGroup container, int position) { viewPager.addView(list.get(position)); return list.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { viewPager.removeView(list.get(position)); } } private Map<ImageView, String> getText() { Map<ImageView, String> map = new HashMap<ImageView, String>(); map.put(list.get(0), "第一个界面"); map.put(list.get(1), "第二个界面"); map.put(list.get(2), "第三个界面"); map.put(list.get(3), "第四个界面"); map.put(list.get(4), "第五个界面"); return map; } private void getImageView2(int i) { switch (i) { case 0: for(int j=0;i<2;i++){ ImageView imageView1 = list.getLast(); list.removeLast(); list.addFirst(imageView1); } viewPager.setAdapter(myAdapter=new MyAdapter()); viewPager.setCurrentItem(2); break; case 1: ImageView imageView2 = list.getLast(); list.removeLast(); list.addFirst(imageView2); viewPager.setAdapter(myAdapter=new MyAdapter()); viewPager.setCurrentItem(2); break; case 3: ImageView imageView3 = list.getFirst(); list.removeFirst(); list.addLast(imageView3); viewPager.setAdapter(myAdapter=new MyAdapter()); viewPager.setCurrentItem(2); break; case 4: for(int j=0;j<2;j++){ ImageView imageView4 = list.getFirst(); list.removeFirst(); list.addLast(imageView4); } viewPager.setAdapter(myAdapter=new MyAdapter()); viewPager.setCurrentItem(2); break; default: break; } } private LinkedList<ImageView> getImageView() { list = new LinkedList<ImageView>(); for (int i = 0; i < ImageId.length; i++) { imageView = new ImageView(this); imageView.setBackgroundResource(ImageId[i]); list.add(imageView); } return list; } private int[] getImageId() { return new int[] { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4, R.drawable.pic5 }; } private void radioBtn(){ rb1.setBackgroundResource(R.drawable.a); rb2.setBackgroundResource(R.drawable.a); rb3.setBackgroundResource(R.drawable.a); rb4.setBackgroundResource(R.drawable.a); rb5.setBackgroundResource(R.drawable.a); } }

viewpager和Gridview的问题

怎么用viewpager实现gridview的效果,在另一个页面可以动态改变item的位置, 可移除可添加。在第一张图上中间主题部分用的是viewpager, ![图片说明](https://img-ask.csdn.net/upload/201603/09/1457489303_54782.png)而在第二张图上却用了gridview。 ![图片说明](https://img-ask.csdn.net/upload/201603/09/1457489324_682778.png)

android viewpager禁止滑动

在网上找了禁止滑动的代码,但是都不行,他们是要继承viewpager这样,我是想点击按钮后禁止viewpager这样网上很多代码都不行,不知道大神么有什么解决办法,

android gridview+viewpager,根据 position改变item背景。

android gridview+viewpager,怎样根据setOnItemClickListener position改变item背景。 viewpager是循环加入的。 activity里 for (i = 0; i < videoNum / 4; i++) {//我这里的videoNum是20 view = getActivity().getLayoutInflater().inflate( R.layout.fragment_four_video, null); if (viewList.size() < (videoNum / 4)) { viewList.add(view); gridView = (GridView) view.findViewById(R.id.gv); mAdapter = new BaseMoreAdapter(getActivity(), 2, 2, displaychannels, i); gridView.setAdapter(mAdapter); gridView.setSelection(0); gridView.setOnItemClickListener(onItemClick); } } mVpAdapter = new ViewPagerAdapter(viewList); mVPager.setAdapter(mVpAdapter); 在点击事件里调用了适配器里的方法更换背景 private OnItemClickListener onItemClick = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { mAdapter.setSeclection(position); mAdapter.notifyDataSetChanged();} adapter下 public void setSeclection(int position) { clickTemp = position; } adapter getview方法里 if (clickTemp == position) { viewHolder.mRlContent.setBackgroundResource(R.drawable.a); } else { viewHolder.mRlContent.setBackgroundResource(R.drawable.b); } 这样写的结果是,因为循环的关系每次都是操作了最后一页,怎样可以更换viewpager当前页的gridview的item的背景。

用viewpager实现的自动滑动广告栏,怎么实现用户在滑动的时候关闭自动滑动功能

如题,小弟在开发过程中遇到的问题,我用线程控制自动滑动功能,想在用户对viewpager进行滑动时 关闭线程, 我的想法是用OnTouchListener,按下和滑动的时候把isUser的boolean值设置成true 关闭线程,up的时候设置成false,线程继续, 可是实现不了 求解答,在线等谢谢

ViewPager嵌套ListView,viewpager无法滑动

ViewPager 嵌套ListView,listView可以点击,viewpager不能滑动,怎么办??? viewpager自定义: @Override public boolean onTouchEvent(MotionEvent ev) { // TODO Auto-generated method stub L.i(TAG, "onTouchEvent"); return super.onTouchEvent(ev); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { // TODO Auto-generated method stub L.i(TAG, "dispatchTouchEvent"); boolean ret = super.dispatchTouchEvent(ev); if (ret) { requestDisallowInterceptTouchEvent(true); } else requestDisallowInterceptTouchEvent(false); return ret; } ListView: @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub L.i(TAG, "onTouchEvent"); return super.onTouchEvent(event); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { // TODO Auto-generated method stub L.i(TAG, "dispatchTouchEvent"); return super.dispatchTouchEvent(ev); } 大神们,怎么办啊???

android viewpager 和gridview怎么用addHeaderView连到一起滑动?

在纵向滑动的时候 横向滑动部分怎么跟着纵向部分一起滑动 ?求答

想把GridView添加到ViewPager里面。加载无效

用TabLayout和ViewPager关联后,想把GridView添加到ViewPager里面。报空指针异常。 -------------------------------------------------------------------- 上面那个问题解决了,没有加载layout所以空对象。 View view = this.getLayoutInflater().inflate(R.layout.grid_view,null); 现在不报错,但是GridView没有加载进来,各位大神帮忙看一下是不是适配器写错了![图片说明](https://img-ask.csdn.net/upload/201804/13/1523585384_433958.png) 04-12 08:39:37.363 25278-25278/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.chenshenglei.tablayouttest, PID: 25278 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.chenshenglei.tablayouttest/com.example.chenshenglei.tablayouttest.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.GridView.setAdapter(android.widget.ListAdapter)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.GridView.setAdapter(android.widget.ListAdapter)' on a null object reference at com.example.chenshenglei.tablayouttest.MainActivity.onCreate(MainActivity.java:46) at android.app.Activity.performCreate(Activity.java:6662) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 下面贴代码MyGridViewAdapter.java ``` import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.SimpleAdapter; import java.util.List; import java.util.Map; /** * Created by chenshenglei on 18-4-12. */ public class MyGridViewAdapter extends SimpleAdapter { private Context mContext; public MyGridViewAdapter(Context context, List<Map<String, Object>> dataLists, int layout, String[] key, int[] item){ super(context, dataLists,layout, key, item); this.mContext = context; } @Override public int getCount() { return 0; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView = super.getView(position, convertView, parent); return convertView; } } ``` 代码TabPagerAdapter.java ``` package com.example.chenshenglei.tablayouttest; import android.content.Context; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.GridView; import android.widget.TextView; import java.security.PublicKey; import java.util.List; /** * Created by chenshenglei on 18-4-12. */ //自定义ViewPager页面适配器 public class TabPagerAdapter extends PagerAdapter { private Context mContext; private String[] mTitleArray; private List<GridView> mList; public TabPagerAdapter (Context context, String[] title) { super(); this.mContext = context; this.mTitleArray = title; } public TabPagerAdapter (Context context, String[] title, List<GridView> array) { super(); this.mContext = context; this.mTitleArray = title; this.mList = array; } @Override public int getCount() { return mTitleArray.length; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { View view = mList.get(position); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public CharSequence getPageTitle(int position) { return mTitleArray[position]; } } ``` 代码 MainActivity.java import android.support.design.widget.TabLayout; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.GridView; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity { private TabLayout mTabLayout; private ViewPager mViewPager; private String[] mTitleArray = {"酒标","葡萄品种"}; private GridView gridView1; private GridView gridView2; private MyGridViewAdapter myGridViewAdapter; private List<GridView> mList; private List<Map<String, Object>> dataList; private List<Map<String, Object>> dataList2; private int[] img = {R.mipmap.ic_launcher_round,R.mipmap.ic_launcher}; private int[] img2 = {R.mipmap.ic_launcher_round,R.mipmap.ic_launcher}; private String[] imgName = {"1","2"}; private String[] imgName2 = {"3","4"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_weibo_timeline); gridView1 = (GridView)findViewById(R.id.grid_test); dataList = new ArrayList<Map<String, Object>>(); myGridViewAdapter = new MyGridViewAdapter(this, getData(), R.layout.grid_item, new String[] {"img", "txt"}, new int[] {R.id.img_item,R.id.txt_item}); gridView1.setAdapter(myGridViewAdapter); gridView2 = (GridView)findViewById(R.id.grid_test); dataList2 = new ArrayList<Map<String, Object>>(); myGridViewAdapter = new MyGridViewAdapter(this, getData2(), R.layout.grid_item, new String[] {"img", "txt"}, new int[] {R.id.img_item,R.id.txt_item}); gridView2.setAdapter(myGridViewAdapter); mList = new ArrayList<GridView>(); mList.add(gridView1); mList.add(gridView2); mViewPager = (ViewPager) findViewById(R.id.view); TabPagerAdapter adapter = new TabPagerAdapter(getApplicationContext(),mTitleArray,mList); mViewPager.setAdapter(adapter); mTabLayout = (TabLayout) findViewById(R.id.tab); mTabLayout.setupWithViewPager(mViewPager); } private List<Map<String,Object>> getData() { for (int i=0; i<img.length; i++) { Map<String,Object> map = new HashMap<String, Object>(); map.put("img", img[i]); map.put("txt", imgName[i]); dataList.add(map); } return dataList; } private List<Map<String,Object>> getData2() { for (int i=0; i<img.length; i++) { Map<String,Object> map = new HashMap<String, Object>(); map.put("img", img2[i]); map.put("txt", imgName2[i]); dataList2.add(map); } return dataList2; } } ``` grid_view.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"> <GridView android:id="@+id/grid_test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numColumns="4" android:verticalSpacing="5dp" android:horizontalSpacing="5dp" android:layout_marginTop="40dp"/> </LinearLayout> grid_item.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" android:gravity="center" android:background="#ffffff"> <ImageView android:id="@+id/img_item" android:src="@mipmap/ic_launcher" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/txt_item" android:textColor="#000000" android:text="文字区域" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>``` activity_weibo_timeline.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v4.view.ViewPager android:id="@+id/view" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> <LinearLayout android:layout_width="200dp" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"> <android.support.design.widget.TabLayout android:id="@+id/tab" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabMode="scrollable"/> </LinearLayout> </LinearLayout>

Viewpager+Fragment中gridView空值问题

在Activity上有一个切换按钮,用来切换gridView的显示行数,但是进入到这个Viewpager里面的第一页和第二页的时候点击时会报空值,只有从第三页第四页进入就不会有问题。 在viewpager中填充的是一个数组 ![图片说明](https://img-ask.csdn.net/upload/201510/22/1445496488_432175.png) ![图片说明](https://img-ask.csdn.net/upload/201510/22/1445496540_973937.png) 然后这是点击事件里面的调用的切换方法 ![图片说明](https://img-ask.csdn.net/upload/201510/22/1445496746_218201.png) 这是切换显示格式的方法,数组遍历到2的时候gridView和listAdapter(gridAdapter)为null,然后报错。 但是当我把上面的 i < fragments.size();换成2时,前面的两页Fragment能够正常切换 ![图片说明](https://img-ask.csdn.net/upload/201510/22/1445496833_89079.png) 这是报错的详细情况 ![图片说明](https://img-ask.csdn.net/upload/201510/22/1445497092_312966.png)

ListView 与ViewPager的嵌套问题

ListView 中每个item均嵌套ViewPager,每个ViewPager中只包含一行GridView,滑动ViewPager时发现滑动不顺畅。请问如何解决?

android 仿花椒直播上下切换房间,在最上层加了一个纵向滑动的viewpager

下层还有一个横向滑动隐藏直播间信息的view,导致下层事件无法响应,怎么处理事件分发

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

你以为这样写Java代码很6,但我看不懂

为了提高 Java 编程的技艺,我最近在 GitHub 上学习一些高手编写的代码。下面这一行代码(出自大牛之手)据说可以征服你的朋友,让他们觉得你写的代码很 6,来欣赏一下吧。 IntStream.range(1, 5).boxed().map(i -&gt; { System.out.print("Happy Birthday "); if (i == 3) return "dear NAME"...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

程序员写出这样的代码,能不挨骂吗?

当你换槽填坑时,面对一个新的环境。能够快速熟练,上手实现业务需求是关键。但是,哪些因素会影响你快速上手呢?是原有代码写的不够好?还是注释写的不够好?昨夜...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

立即提问
相关内容推荐