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作为单位
本文介绍如何在Android应用中实现ListView,包括取消标题栏、简单展示数据、定制界面、提升ListView性能及添加点击事件等关键步骤。
3698

被折叠的 条评论
为什么被折叠?



