Scrollview与ListView


一、简介

基于QQ、微信等对话框进行的小实验,如下图
聊天
效果图:顶部首页通讯字段可横向滑动,列表上下滑动。
在这里插入图片描述

二、代码

scrollview.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <HorizontalScrollView
        android:id="@+id/hscrollview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none"
        tools:ignore="MissingConstraints">

        <LinearLayout
            android:id="@+id/line1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:background="@color/purple_500"
                android:text="首页 "
                android:textColor="@color/white" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:background="@color/purple_500"
                android:text="通讯"
                android:textColor="@color/white" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:background="@color/purple_500"
                android:text="首页 "
                android:textColor="@color/white" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:background="@color/purple_500"
                android:text="通讯"
                android:textColor="@color/white" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:background="@color/purple_500"
                android:text="首页 "
                android:textColor="@color/white" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:background="@color/purple_500"
                android:text="通讯"
                android:textColor="@color/white" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:background="@color/purple_500"
                android:text="首页 "
                android:textColor="@color/white" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:background="@color/purple_500"
                android:text="通讯"
                android:textColor="@color/white" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:background="@color/purple_500"
                android:text="首页 "
                android:textColor="@color/white" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:background="@color/purple_500"
                android:text="通讯"
                android:textColor="@color/white" />


        </LinearLayout>

    </HorizontalScrollView>

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/line1">

    </ListView>


</LinearLayout>

listview_item.xml:

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

    <ImageView
        android:id="@+id/item_img"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/three"/>

    <TextView
        android:id="@+id/item_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="陆逊"
        android:layout_toRightOf="@+id/item_img"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="20dp"
        android:textSize="20sp"
        android:textColor="@color/red"/>

    <TextView
        android:id="@+id/item_sign"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/item_name"
        android:layout_alignLeft="@+id/item_name"
        android:layout_marginTop="20dp"
        android:text="你愁啥,小心我打你啊!"
        android:textColor="@color/purple_700"
        android:textSize="15sp" />

</RelativeLayout>

scrollview.java:

private List<ThreeKill> list;
    private ThreeKill threeKill;
    private MyAdapter adapter;
    private ListView listView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.scrollview);
        initaction();
        adapter = new MyAdapter(this, list);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                threeKill = list.get(i);
                Toast.makeText(Scrollview.this, threeKill.getName() + "\n" + threeKill.getSign(), Toast.LENGTH_SHORT).show();
            }
        });
    }

    /**
     * 初始化
     */
    private void initaction() {
        listView = findViewById(R.id.listview);
        list = new ArrayList<ThreeKill>();
        list.add(new ThreeKill(R.drawable.three, "曹操", "宁我负天下人,勿让天下人负我。"));
        list.add(new ThreeKill(R.drawable.three, "曹仁", "宁我负天下人。"));
        list.add(new ThreeKill(R.drawable.three, "曹植", "宁我负天下人,勿让天下人负我。"));
        list.add(new ThreeKill(R.drawable.three, "曹爽", "宁我负天下人。"));
        list.add(new ThreeKill(R.drawable.three, "曹丕", "宁我负天下人,勿让天下人负我。"));
        list.add(new ThreeKill(R.drawable.three, "赵云", "宁我负天下人。"));
        list.add(new ThreeKill(R.drawable.three, "张飞", "宁我负天下人,勿让天下人负我。"));
        list.add(new ThreeKill(R.drawable.three, "关羽", "宁我负天下人。"));
        list.add(new ThreeKill(R.drawable.three, "吕布", "宁我负天下人,勿让天下人负我。"));
        list.add(new ThreeKill(R.drawable.three, "刘备", "宁我负天下人。"));
        list.add(new ThreeKill(R.drawable.three, "马超", "宁我负天下人,勿让天下人负我。"));
        list.add(new ThreeKill(R.drawable.three, "黄忠", "宁我负天下人。"));

    }

自定义Adapter继承自BaseAdapter:MyAdapter.java

public class MyAdapter extends BaseAdapter {

    private Context context;
    private List<ThreeKill> list;

    public MyAdapter(Context context, List<ThreeKill> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    //填充的item的个数
    public int getCount() {
        return list.size();
    }

    @Override
    //指定索引对应的item的数据项
    public Object getItem(int position) {
        return null;
    }

    @Override
    //指定索引对应的item的id值
    public long getItemId(int position) {
        return 0;
    }

    @Override
    //填充每个item的内容
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        View view = null;
        ViewHolder viewHolder = null;
        if (view == null){
            view = LayoutInflater.from(context).inflate(R.layout.listview_item,null);
            viewHolder = new ViewHolder();
            viewHolder.img = view.findViewById(R.id.item_img);
            viewHolder.name = view.findViewById(R.id.item_name);
            viewHolder.sign = view.findViewById(R.id.item_sign);
            view.setTag(viewHolder);
        }else {
            view = convertView;
            viewHolder = (ViewHolder) view.getTag();
        }
        viewHolder.img.setImageResource(list.get(position).getImg());
        viewHolder.name.setText(list.get(position).getName());
        viewHolder.sign.setText(list.get(position).getSign());
        return view;
    }
}

//存放item中的所有控件
class ViewHolder{
    ImageView img;
    TextView name;
    TextView sign;
}

ThreeKill .java

public class ThreeKill {

    private int img;
    private String name;
    private String sign;

    public ThreeKill(int img, String name, String sign) {
        this.img = img;
        this.name = name;
        this.sign = sign;
    }

    public int getImg() {
        return img;
    }

    public void setImg(int img) {
        this.img = img;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSign() {
        return sign;
    }

    public void setSign(String sign) {
        this.sign = sign;
    }
}

列表的点击事件:

 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                threeKill = list.get(i);
                Toast.makeText(Scrollview.this, threeKill.getName() + "\n" + threeKill.getSign(), Toast.LENGTH_SHORT).show();
            }
        });

如图:
在这里插入图片描述

还有一些其他的关于滑动的布局及做法,这只是发动布局的最常用的一种。


版权声明:本文为Alan_lzy原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。