为了账号安全,请及时绑定邮箱和手机立即绑定

左右上下都可以滑动的列表

标签:
Android
使用ListView和HorizontalScrollView打造可以左右和上下滑动的列表布局,有些情况下很实用哦。
<?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="com.cjt.horizontalscrollviewdemo.MainActivity">

    <HorizontalScrollView
        android:id="@+id/mHorizontalScrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <LinearLayout
                android:id="@+id/titleLayout"
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="40dp"/>

            <ListView
                android:id="@+id/mListView"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </LinearLayout>
    </HorizontalScrollView>
</RelativeLayout>
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    // 界面上的控件
    private ListView mListView;
    private MyListAdapter mAdapter;
    private LinearLayout mTitleLayout;

    // 相关的数据
    private List<ItemBean> dataList = new ArrayList<>();
    private ItemBean bean;
    private List<String> idList = new ArrayList<>();

    private static final int COLUMN_NUM = 15;
    private static final int ROW_NUM = 15;

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

        mListView = (ListView) findViewById(R.id.mListView);
        mTitleLayout = (LinearLayout) findViewById(R.id.titleLayout);

        for (int i = 0; i < COLUMN_NUM; i++) {
            View titleView = LayoutInflater.from(this).inflate(R.layout.item_text, null);
            TextView title = (TextView) titleView.findViewById(R.id.itemTitleTv);
            title.setText("标题" + i);
            mTitleLayout.addView(titleView, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f));
        }

        // 准备数据
        for (int i = 1; i <= COLUMN_NUM; i++) {
            for (int j = 1; j <= ROW_NUM; j++) {
                idList.add(i + "-" + j);
            }
        }

        for (int i = 0; i < idList.size(); i++) {
            bean = new ItemBean();
            bean.setId(idList.get(i));
            bean.setPictureName("同学" + i);
            bean.setPictureResId(R.mipmap.ic_launcher);
            dataList.add(bean); // 添加到数据集合
        }

        // 设置适配器
        mAdapter = new MyListAdapter(this, dataList, COLUMN_NUM);
        mListView.setAdapter(mAdapter);
    }
}
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.List;

/**
 * Created by CaoJiangtao on 2017/2/8.
 *  列表适配器
 */

public class MyListAdapter extends BaseAdapter {

    private Context mContext ;
    private List<ItemBean> mDataLists ;
    private int mColumnNum = 0 ;
    private int mRowNum = 0 ;

    public MyListAdapter() {
    }

    /**
     *  构造函数
     * @param mContext
     * @param mDataLists
     */
    public MyListAdapter(Context mContext, List<ItemBean> mDataLists , int columnNum ) {
        this.mContext = mContext;
        this.mDataLists = mDataLists;
        this.mColumnNum = columnNum ;
    }

    /**
     *  构造函数+1
     * @param mContext
     * @param mDataLists
     * @param columnNum
     */
    public MyListAdapter(Context mContext, List<ItemBean> mDataLists , int columnNum , int rowNum) {
        this.mContext = mContext;
        this.mDataLists = mDataLists;
        this.mColumnNum = columnNum ;
        this.mRowNum = rowNum ;
    }

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

    @Override
    public ItemBean getItem(int i) {
        return mDataLists.get(i);
    }

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

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        view = LayoutInflater.from(mContext).inflate(R.layout.list_row_layout,null);

        LinearLayout row = (LinearLayout) view.findViewById(R.id.listViewRow);  // 行布局
        if(row != null) row.removeAllViews(); // 清空行
        for (int i = 0; i < mColumnNum ; i++) {
            View itemView = LayoutInflater.from(mContext).inflate(R.layout.item,null);
            TextView itemNameTv = (TextView) itemView.findViewById(R.id.itemNameTv);
            TextView itemLocationTv = (TextView) itemView.findViewById(R.id.itemLocationTv);

            ItemBean itemBean = getLocationBean(position+1 , i+1); // 获取对应的实体类
            if(itemBean != null){
                itemNameTv.setText(itemBean.getPictureName());
                itemLocationTv.setText(itemBean.getId());
                // 将每个元素添加到行布局中去
                row.addView(itemView, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f));
            }
        }
        return view;  // 返回加载好了内容的行布局
    }

    /***
     *  根据座位号获取对应的元素
     * @param row
     * @param column
     * @return
     */
    private ItemBean getLocationBean(int row , int column){
        String index = column+"-"+row; // 生成索引,对比索引找到对应的学生
        for (int i = 0; i < this.getCount(); i++) {
            if(this.getItem(i).getId().equals(index))
                return this.getItem(i) ;
        }
        return null ;
    }
}

原文链接:http://www.apkbus.com/blog-694091-63179.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消