Android Stdio中ListView的使用

Android Stdio中ListView的使用,第1张

首先我说明一下这篇文章实现的效果是怎样的。

我这里写上中下三个layout来写。

所有的前提都是先建一个项目,建项目不会的请看我的另一个笔记http://note.youdao.com/noteshare?id=4cd08a266542b4c60a834da295b0e2b0

我建了一个HeadAndFootOtherActivity,和headfoot_layout.xml(承载ListView)、lvhead_layout.xml(承载ImageView)、 lvfoot_layout.xml(承载Button)。

我在headfoot_xml写了两个,一个是ListView,一个是TextView,TextView是为了当ListView显示的数据为空时显示的数据,给用户一个比较友好的画面。

然后来看Activity中的设置

import android.os.Bundle

import android.support.annotation.Nullable

import android.support.v7.app.AppCompatActivity

import android.view.LayoutInflater

import android.view.View

import android.widget.ArrayAdapter

import android.widget.Button

import android.widget.ImageView

import android.widget.ListView

import android.widget.TextView

import java.util.ArrayList

import java.util.List

public class HeadAndFootOtherActivityextends AppCompatActivity {

private ListViewlistView

    private Listlist

    private TextViewtextView

    private ArrayAdapterarrayAdapter

    @Override

    protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState)

        setContentView(R.layout.headfoot_layout)  //加载布局

        listView = findViewById(R.id.hfLV)  //获取布局中的listView

        textView = findViewById(R.id.hfTV)//获取布局中的textView

        list =new ArrayList<>()       //模拟listView中的数据

        for (int i =0i <20i++) {

list.add("item" + i)

        }

//把list的数据加载到适配器中

arrayAdapter =new ArrayAdapter<>(HeadAndFootOtherActivity.this, android.R.layout.simple_list_item_1, list)

        //将lvhead_layout xml布局文件转换成view视图

        View headerView = LayoutInflater.from(HeadAndFootOtherActivity.this).inflate( R.layout.lvhead_layout, null)

        //从headView视图中获取imageView控件

        ImageView imageView = headerView.findViewById(R.id.iv)

        //给imageView设置资源,这个资源我放在res下的drawable,名字为p1

        imageView.setImageResource(R.drawable.p1)

        //给listView添加头部视图

        listView.addHeaderView(headerView)

        //接下来类似加头部视图的做法

        View footerView = LayoutInflater.from(HeadAndFootOtherActivity.this).inflate(R.layout.lvfoot_layout, null)

        Button btn = footerView.findViewById(R.id.btn)

        //添加按钮的点击事件,模拟点击加载更多的数据

        btn.setOnClickListener(new View.OnClickListener() {

@Override

            public void onClick(View v) {

int index =list.size()

                for (int i = indexi <index +10i++) {

list.add("item" + i)

                }

//把适配器中的数据更新

arrayAdapter.notifyDataSetChanged()

            }

})

        //给listView加载尾部视图

        listView.addFooterView(footerView)

        //这里需要注意的是, 不管是头部视图还是尾部视图都必须在加载适配器之前加载,不然会报错

        listView.setAdapter(arrayAdapter)

        //这一句是当你的listView没有任何数据时,显示这个TextView,对用户显示比较友好。

        listView.setEmptyView(textView)

    }

}

写到这里,listView就基本上写完了,不要忘记在你的注册表里面注册你的Activity。

写了那么多的文字,来看一下效果图。

好啦,这个结束啦!!!有什么问题多多指教,安卓新手。

定义一个样式一条线

<style name="vertical_layout">

<item name="android:layout_width">1dp</item>

<item name="android:layout_height">fill_parent</item>

<item name="android:background">#dadada</item>

</style>

1.为表头新建一个layout:a_item.xml(一共设置3个列名)

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/a_item"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@android:color/white"

android:cacheColorHint="#00000000"

android:orientation="horizontal" >

<TextView

android:id="@+id/item1bzrbjzb"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@android:color/transparent"

android:ellipsize="none"

android:gravity="center"

android:paddingBottom="5dp"

android:paddingTop="5dp"

android:singleLine="false"

android:textSize="15.0sp" >

</TextView>

<View style="@style/vertical_layout" /><!-- 一条线 -->

<TextView

android:id="@+id/item2bzrbjzb"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@android:color/transparent"

android:ellipsize="none"

android:gravity="center"

android:paddingBottom="5dp"

android:paddingTop="5dp"

android:singleLine="false"

android:text="@string/bzr_km" <!-- 列名-->

android:textColor="@android:color/black"

android:textSize="15.0sp" >

</TextView>

<View style="@style/vertical_layout" /><!-- 一条线 -->

<TextView

android:id="@+id/item3bzrbjzb"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@android:color/transparent"

android:ellipsize="none"

android:gravity="center"

android:paddingBottom="5dp"

android:paddingTop="5dp"

android:singleLine="false"

android:text="@string/bzr_bjqk" <!-- 列名-->

android:textColor="@android:color/black"

android:textSize="15.0sp" >

</TextView>

<View style="@style/vertical_layout" /><!-- 一条线 -->

<TextView

android:id="@+id/item4bzrbjzb"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@android:color/transparent"

android:ellipsize="none"

android:gravity="center"

android:paddingBottom="5dp"

android:paddingTop="5dp"

android:singleLine="false"

android:text="@string/bzr_jfjgl"<!-- 列名-->

android:textColor="@android:color/black"

android:textSize="15.0sp" >

</TextView>

<TextView

android:id="@+id/item6ctj"

android:layout_width="100.0dip"

android:layout_height="wrap_content"

android:background="@android:color/transparent"

android:ellipsize="none"

android:gravity="center"

android:paddingBottom="5dp"

android:paddingTop="5dp"

android:singleLine="false" >

</TextView>

</LinearLayout>

第一个和最后一个textView不给赋值,用于填充屏幕的空白,显示好看

2.给界面**Activity新建一个main_layout,应用刚才的a_item.xml以及添加一个继承了listView的view对象HVListView

***

<include layout="@layout/a_item" />

<com.gdtech.znpc.android.view.HVListView

android:id="@android:id/list"

android:background="@android:color/white" android:fastScrollEnabled="true"

android:fadingEdgeLength="0.0sp" android:layout_width="wrap_content"

android:layout_height="fill_parent" android:drawSelectorOnTop="false"

android:divider="#dadada"

android:dividerHeight="1.0dip"

android:cacheColorHint="#00000000">

</com.gdtech.znpc.android.view.HVListView >

******

3.获取屏幕的分辨率 为每个表头的设置宽度

private DisplayMetrics dm = new DisplayMetrics()

getWindowManager().getDefaultDisplay().getMetrics(dm)

private int w = dm.widthPixels / 16// 当前分辨率 宽度 分为16份

获取a_item里面的每个textView的id 进行宽度设置

mListView = (HVListView) findViewById(android.R.id.list)

// 设置列头

mListView.mListHead = (LinearLayout) findViewById(R.id.a_item)

// 设置表头的宽度

TextView t11 = (TextView) findViewById(R.id.item1bzrbjzb)

TextView t12 = (TextView) findViewById(R.id.item2bzrbjzb)

TextView t13 = (TextView) findViewById(R.id.item3bzrbjzb)

TextView t14 = (TextView) findViewById(R.id.item4bzrbjzb)

//t13.setText("成绩")

t11.setWidth(w * 0) //不显示第一列

t12.setWidth(w * 3)

t13.setWidth(w * 6)

t14.setWidth(w * 6)

4.给HVListView添加适配器,并设置每列的宽度和表头对应

class ViewHolderbjzb { // 这个类里面定义的TextView数量和表头里面的TextView要一致

TextView item1bjzb

TextView item2bjzb

TextView item3bjzb

TextView item4bjzb

}

mAdapter = new DataAdapter1()

mListView.setAdapter(mAdapter)

private class DataAdapter1 extends BaseAdapter {

@Override

public int getCount() {

return hang// 固定显示多少行数据

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

if (convertView == null) {

convertView = mInflater1.inflate(R.layout.bzr_fx_bjzb_head_item,

null)

holder = new ViewHolderbjzb()

holder.item1bjzb = ((TextView) convertView

.findViewById(R.id.item1bzrbjzb))

holder.item2bjzb = ((TextView) convertView

.findViewById(R.id.item2bzrbjzb))

holder.item3bjzb = ((TextView) convertView

.findViewById(R.id.item3bzrbjzb))

holder.item4bjzb = ((TextView)convertView

.findViewById(R.id.item4bzrbjzb))

// holder.item4bjzb=((TextView)

// convertView.findViewById(R.id.item4bjzb))

// holder.item5bjzb=((TextView)

// convertView.findViewById(R.id.item5bjzb))

convertView.setTag(holder)

// 设置表格内容宽度,与表头对应

holder.item1bjzb.setWidth(w * 0)

holder.item2bjzb.setWidth(w * 3)

holder.item3bjzb.setWidth(w * 6)

holder.item4bjzb.setWidth(w * 6)

holder.item1bjzb.setText("")

holder.item2bjzb.setText("")

holder.item3bjzb.setText("")

holder.item4bjzb.setText("")

// holder.item4bjzb.setText("")

// holder.item5bjzb.setText("")

} else {

holder = (ViewHolderbjzb) convertView.getTag()

}

for (int i = 0i <listDatas.size()i++) {

// 显示列的id数

// holder.item1bjzb.setText((position + 1) + "")

/*

listDatas 就是要显示的后台数据

*/

if (position == i) {

Map<String, Object>row = listDatas.get(position)

holder.item1bjzb.setText("用后台获取的数据 进行填充就可以"))

holder.item2bjzb.setText("用后台获取的数据 进行填充就可以"))

holder.item3bjzb.setText("用后台获取的数据 进行填充就可以"))

holder.item4bjzb.setText("用后台获取的数据 进行填充就可以"))

}

}

// 设置隔行颜色

if (position % 2 != 0) {

convertView.setBackgroundResource(R.drawable.listview_color_1)

} else {

convertView.setBackgroundResource(R.drawable.listview_color_2)

}

return convertView

}

网上有很多解决 android listview 水平和垂直滚动的代码,我没有按照他们说的做(以前没搜到 O(∩_∩)O~) 我采用的是添加HorizontalScrollView

Java代码

1. <ScrollView android:id="@+id/ScrollView01"

2. android:layout_height="300px"

3. android:layout_x="16px"

4. android:layout_y="84px"

5. android:layout_width="290px"

6. android:scrollbars="horizontal|vertical">

7. <HorizontalScrollView android:id="@+id/HorizontalScrollView01"

8. android:layout_height="fill_parent"

9. android:layout_width="wrap_content">

10. <LinearLayout android:id="@+id/LinearLayout02"

11. android:layout_width="wrap_content"

12. android:orientation="vertical"

13. android:layout_height="fill_parent">

14. <ListView android:id="@+id/listview"

15. android:layout_height="300px"

16. android:layout_width="fill_parent">

17. </ListView>

18. </LinearLayout>

19. </HorizontalScrollView>

20. </ScrollView>

我有一个Listview,因为横屏和竖屏原因,内容较多,竖屏会出现有些数据无法显示

于是让Listview在横向上可以滚动。

解决的办法是,用HorizontalScrollView包装Listview,这样,当竖屏时,就会出现横向滚动条。

<HorizontalScrollView

Android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:fillViewport="true">

<ListView android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_weight="1"

android:background="@drawable/email_box"

android:id="@+id/advice_main_list_id"

android:padding="5dip"/>

</HorizontalScrollView>

但此时又出现了另一个问题,加上HorizontalScrollView后,虽然我已经设了Listview的宽度是fill_parent。但当内容较少时,Listview还是根据内容自适应宽度,不能满屏。

此时,需要设置一个属性就能解决问题了。设置HorizontalScrollView的android:fillViewport="true"。也就是设置是否将HorizontalScrollView的内容宽度拉伸以适应视口(viewport)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/7882455.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存