在Viewpager中使用Listview时,内容无法显示

FFlush 发布于 2018/04/01 14:31
阅读 282
收藏 0

我想弄的一个显示蓝牙设备的页面,还要显示一些其他的页面,所以我想用viewpager来实现,但是在ListView中出问题了,它显示不出来内容。

这是activity_main.xml ,  除了Viewpager还有一个用于显示底部图片的

```
<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="#aabbcc" >
    <android.support.v4.view.ViewPager
        android:id="@+id/mViewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        <android.support.v4.view.PagerTabStrip
            android:id="@+id/mTab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="top" />
    </android.support.v4.view.ViewPager>
    <LinearLayout
        android:id="@+id/mImgs"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="10dp"
        android:orientation="horizontal" >
    </LinearLayout>
</RelativeLayout>
 
```

下面是mainActivity.java

```
 public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private ViewPager mViewPager;//存放多个页面的控件
    private LinearLayout mImgs;//存放底部图片的线性布局
    // R.layout.lightslayout, "灯",
    private int[] layouts = new int[]{R.layout.deviceslistlayout};//多个页面的布局文件
    private String[] titles = new String[]{"蓝牙列表"};
    private ImageView[] mImgViews = new ImageView[layouts.length];//存放底部小圆点图片控件
    private List<View> views = new ArrayList<>();//存放所有页面的集合
    private List<String> pagerTitles = new ArrayList<>();    //存放所有标题的集合
    /**************for list*********************/
    // listview的适配器
    private ListView mDevicesListView = null;
    private SimpleAdapter simpleAdapter = null;
    private List<HashMap<String, Object>> data = null;
    // 获得默认的蓝牙适配器
    private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    /*******************************************/
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置屏幕为全屏显示
        setContentView(R.layout.activity_main);
        mImgs = findViewById(R.id.mImgs);//根据ID获取相应的控件
        mViewPager = findViewById(R.id.mViewPager);
        // 找到 ListView
        View device_view = getLayoutInflater().inflate(R.layout.deviceslistlayout, null);
        mDevicesListView = device_view.findViewById(R.id.devicesListView);

        PagerTabStrip mTab = findViewById(R.id.mTab);
        mTab.setTextSpacing(300);//设置选项卡之间的边距

        init();//执行初始化操作
        mViewPager.setAdapter(new MyPagerAdapter());//为ViewPager控件添加适配器
        initImg();//初始化显示的图片
        mViewPager.addOnPageChangeListener(new MyPageChangeListener());// 为ViewPager控件添加页面变化事件监听器
    }
    public void init() {//该方法用于初始化需要显示的页面,并将其添加到集合中
        for (int i = 0; i < layouts.length; i++) {
            View view = getLayoutInflater().inflate(layouts[i], null);
            views.add(view);
            pagerTitles.add(titles[i]);
        }
        /* ***********************here added some***************/
        data = new ArrayList<>();
        HashMap<String, Object> map = new HashMap<>();
        map.put("devices_address", "2345678");
        map.put("devices_name", "hello"); // 设备名称
        map.put("devices_right_icon", R.drawable.checked);
        data.add(map);
        simpleAdapter = new SimpleAdapter(this, data, R.layout.devicesliststylelayout,
                new String[]{"devices_name", "devices_right_icon"},
                new int[]{R.id.devices_name, R.id.devices_right_image});
        Log.d("TAG", "THE DATA IS"+data.toString());
        mDevicesListView.setAdapter(simpleAdapter);
        mDevicesListView.setOnItemClickListener(this);
        /* **********************************************************/
    }
    // onCreate() 之后为onStart();或者在activity由stop转为Active时调用
    @Override
    protected void onStart() {
        super.onStart();
        /* 判断蓝牙是否可用,不可用时请求打开*/
        if (mBluetoothAdapter != null && !mBluetoothAdapter.isEnabled()) {
            Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivity(intent);
        }
    }
    // onStart() 之后为onResume();
    @Override
    protected void onResume() {
        super.onResume();
        // 获取以前匹配过的蓝牙设备
        Set<BluetoothDevice> devices = null;
        if (mBluetoothAdapter != null)
            devices = mBluetoothAdapter.getBondedDevices();

        if (devices != null && devices.size() > 0) {
            data.clear();
            for (BluetoothDevice device : devices) {
                HashMap<String, Object> map = new HashMap<>();
                map.put("devices_address", device.getAddress());
                map.put("devices_name", device.getName()); // 设备名称
                map.put("devices_right_icon", R.drawable.checked);
                data.add(map);
            }
        } else {
            HashMap<String, Object> map = new HashMap<>();
            map.put("devices_address", null);
            map.put("devices_name", "没有匹配的设备"); // 设备名称
            map.put("devices_right_icon", R.drawable.checked);
            data.add(map);
        }
        //Log.d("TAG", "THE DATA IS"+data.toString());
        simpleAdapter.notifyDataSetChanged();   // 刷新内容
    }
    /* *****************************************************************************/
    //自定义PagerAdapter类,该类用于封装需要切换的多个页面
    private class MyPagerAdapter extends PagerAdapter {
        public int getCount() {// 该方法返回所包含的页面的个数
            return views.size();
        }

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

        public CharSequence getPageTitle(int position) {// 该方法用于返回页面的标题
            return pagerTitles.get(position);
        }

        // 该方法用于初始化指定的页面
        @NonNull
        public Object instantiateItem(@NonNull ViewGroup container, int position) {
            container.addView(views.get(position));
            return views.get(position);
        }

        // 该方法用于销毁指定的页面
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
            container.removeView(views.get(position));
        }
    }
    // 自定义页面变换事件监听器
    private class MyPageChangeListener implements ViewPager.OnPageChangeListener {
        public void onPageScrollStateChanged(int arg0) {
        }

        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }
        public void onPageSelected(int selected) {// 显示的页面发生变化时触发
            resetImg();// 重置底部显示的图片
            mImgViews[selected].setImageResource(R.drawable.choosed);// 将当前页面对应的图片设置为红色
        }
    }

    public void initImg() {//该方法用于初始化底部图片,并将图片添加到水平线性布局中
        for (int i = 0; i < mImgViews.length; i++) {
            mImgViews[i] = new ImageView(MainActivity.this);
            if (i == 0) {//默认情况下第一张图被选中
                mImgViews[i].setImageResource(R.drawable.choosed);
            } else {
                mImgViews[i].setImageResource(R.drawable.unchoosed);
            }
            mImgViews[i].setPadding(20, 0, 0, 0);
            mImgViews[i].setId(i);
            mImgViews[i].setOnClickListener(mOnClickListener);
            mImgs.addView(mImgViews[i]);
        }
    }
    // 声明一个匿名的单击事件处理器变量,用于处理底部图片的单击事件
    // 该事件处理器主要是切换图片的显示,被单击的图片显示为红色,其他的显示为黄色
    private View.OnClickListener mOnClickListener = new View.OnClickListener() {
        public void onClick(View v) {
            resetImg();// 重置图片的显示,将所有的图片都设置为黄色
            ((ImageView) v).setImageResource(R.drawable.choosed);// 将被单击的图片设置为红色
            mViewPager.setCurrentItem(v.getId());// 切换页面的显示,根据单击的图片显示对应的页面
        }
    };
    public void resetImg() {// 该方法用于将所有的ImageView都显示为未选中状态的图片
        for (ImageView mImgView : mImgViews) {
            mImgView.setImageResource(R.drawable.unchoosed);
        }
    }

//    @Override
//    public boolean onCreateOptionsMenu(Menu menu) {
//        getMenuInflater().inflate(R.menu.main, menu);
//        return true;
//    }
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    }

}

```

不知道问题出在哪了,

运行出来 的结果是这样:

加载中
返回顶部
顶部