Android--ListView

1. 取消标题栏
values->styles.xml中:
在当先使用的style的parent属性添加NoActionBar.如原先为
style name="AppTheme" parent="Theme.AppCompat.Light".
修改后为
style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"

2.

ListView简单方法

···1. 在xml下新建一个ListView项目

···2. 在主活动中加入:

public class MainActivity extends AppCompatActivity {

    private String[] data={"apple","pear","watermelon","grape"
,"strawberry","cherry","banana","melon","orange","blueberry","akb","hkt","nmb","ske","ngt","stu"};

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

        ArrayAdapter<String> fruits=new ArrayAdapter<String>(MainActivity.this
        ,android.R.layout.simple_list_item_1,data);
        ListView listView=(ListView)findViewById(R.id.list_view);
        listView.setAdapter(fruits);
    }
}

!!!数组中的数据无法直接传递给ListView,需要借助适配器,最好用的是ArrayAdapter,用来指定为String类型,在构造函数中把要适配的数据传入即可,有三个参数,第一个为上下文--MainActivity.this,第二个是ListView子项布局的id[android.R.layout.simple_list_item_1],第三个是要适配的数据

最后实现ListView与数据之间的关联--setAdapter

3. 定制ListView界面
···1.定义一个实体类,作为ListView适配器的适配内容

public class Fruit {
    private String name;
    private String price;
    public Fruit(String name,String price){
        this.name=name;
        this.price=price;
    }
    public String getName() {
        return name;
    }
    public String getPrice() {
        return price;
    }
}

···2.新建布局在layout目录下

<?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">

    <TextView
        android:id="@+id/fruit_name"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:textSize="30sp"
        android:textColor="#000000"
        android:layout_weight="1"
        />


    <TextView
        android:textColor="#000000"
        android:id="@+id/fruit_price"
        android:textSize="30sp"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="1"
        android:gravity="right"
        />
</LinearLayout>

···3.创建新的适配器,继承自ArrayAdapter,并泛类型为fruit

package com.example.zzz.listviewdemo;

import android.content.Context;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import java.util.List;

/**
 * Created by zzz on 2017/8/7.
 */

public class FruitAdapter extends ArrayAdapter <Fruit>{
    private int resourceid;
    public FruitAdapter(Context context, int textVi, List<Fruit> objects){
        super(context,textVi,objects);
        resourceid=textVi;
    }

    public View getView(int pos, View con, ViewGroup par)
    {
        Fruit fruit=getItem(pos);
        View view= LayoutInflater.from(getContext()).inflate(resourceid,null);
        TextView textView=(TextView)view.findViewById(R.id.fruit_name);
        TextView textView1=(TextView)view.findViewById(R.id.fruit_price);
        textView.setText(fruit.getName());
        textView1.setText(fruit.getPrice());
        return view;
    }
}

重写了构造函数和getView()函数[这个函数在每个子项被滚动到屏幕内的时候都会被调用]

···4.修改主活动代码

package com.example.zzz.listviewdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

        private List<Fruit> fruitList=new ArrayList<Fruit>();
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initFruits();
            FruitAdapter fruits=new FruitAdapter(MainActivity.this
            ,R.layout.layout,fruitList);
            ListView listView=(ListView)findViewById(R.id.list_view);
            listView.setAdapter(fruits);
        }
        private void initFruits(){
            Fruit apple=new Fruit("apple","3");
            fruitList.add(apple);
            Fruit pear=new Fruit("pear","3");
            fruitList.add(pear);
            Fruit orange=new Fruit("orange","3");
            fruitList.add(orange);
             Fruit apple1=new Fruit("apple1","3");
            fruitList.add(apple1);
            Fruit pear1=new Fruit("pear1","3");
            fruitList.add(pear1);
            Fruit orange1=new Fruit("orange1","3");
            fruitList.add(orange1);
            Fruit apple2=new Fruit("apple2","3");
            fruitList.add(apple2);
            Fruit pear2=new Fruit("pear2","3");
            fruitList.add(pear2);
            Fruit orange3=new Fruit("orange3","3");
            fruitList.add(orange3);
        }
    }

5. 适配器:就是把一些数据给弄得适当,适合以便于在View上显示。可以看作是界面数据绑定的一种理解。它所操纵的数据一般都是一些比较复杂的数据,如数组,链表, 数据库,集合等。适配器就像显示器,把复杂的东西按人可以接受的方式来展现。

常见方法有:
public int getCount() //得到数据的行数
public Object getItem(int position)//根据position得到某一行的记录
public long getItemId(int position)//的到某一条记录的ID

//下面这个方法是最重要的相比于其它几个方法,它显式的定义了,适配器将要以什么样的方式去显示我们所填充的数据,在自定义的适配器里面我们通常会给它写个布局文件
public View getView(int position, View convertView, ViewGroup parent)

6. 提升ListView的运行效率

package com.example.zzz.listviewdemo;

import android.content.Context;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import java.util.List;

/**
 * Created by zzz on 2017/8/7.
 */

public class FruitAdapter extends ArrayAdapter <Fruit>{
    private int resourceid;
    public FruitAdapter(Context context, int textVi, List<Fruit> objects){
        super(context,textVi,objects);
        resourceid=textVi;
    }

    public View getView(int pos, View con, ViewGroup par)
    {
        Fruit fruit=getItem(pos);
        View view;
        ViewHolder viewHolder;
        if (con==null) {
            view = LayoutInflater.from(getContext()).inflate(resourceid, null);
            viewHolder=new ViewHolder();
            viewHolder.name=(TextView)view.findViewById(R.id.fruit_name);
            viewHolder.price=(TextView)view.findViewById(R.id.fruit_price);
            view.setTag(viewHolder);
        }else {
            view=con;
            viewHolder=(ViewHolder) view.getTag();
        }

        viewHolder.name.setText(fruit.getName());
        viewHolder.price.setText(fruit.getPrice());
        return view;
    }
}

class ViewHolder{
    TextView name;
    TextView price;
}

7. 给ListView子项添加点击事件

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initFruits();
    FruitAdapter fruits=new FruitAdapter(MainActivity.this
    ,R.layout.layout,fruitList);
    ListView listView=(ListView)findViewById(R.id.list_view);
    listView.setAdapter(fruits);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Fruit fruit1=fruitList.get(position);
            Toast.makeText(MainActivity.this,"你点击了"+fruit1.getName(),Toast.LENGTH_SHORT).show();
        }
    });
}

8.尺寸:在编写程序时,如果必须要指定一个值,则使用dp(dip)来作为单位,指定文字大小时,则使用sp作为单位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值