您的位置:首页 > 其它

Adapter类型控件之ListView的数据更新问题

2016-06-25 22:30 323 查看
(一)概述



(二)listview的数据更新

(1)先写一个正常的demon

entity类:Data.java

public class Data {

private int ImgId;
private String content;

public  Data() {}

public  Data(int newImgId , String newcontent) {
this.ImgId = newImgId;
this.content = newcontent;
}

public int getImgId() {
return ImgId;
}

public void setImgId(int imgId) {
ImgId = imgId;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

}


自定义的BaseAdapter—–MyAdapter.java

public class MyAdapter extends BaseAdapter {

private Context mContext;
private LinkedList<Data> mDatas;

public  MyAdapter(){}

public MyAdapter(LinkedList<Data> mDatas , Context mContext ){
this.mContext = mContext;
this.mDatas = mDatas;
}

@Override
public int getCount() {

return mDatas.size();
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {

return position;
}

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

ViewHolder viewHolder = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null ,false);
viewHolder = new ViewHolder();
viewHolder.img_icon = (ImageView) convertView.findViewById(R.id.img_icon);
viewHolder.txt_content = (TextView) convertView.findViewById(R.id.txt_content);

convertView.setTag(viewHolder);
}else {
viewHolder = (ViewHolder) convertView.getTag();
}

viewHolder.img_icon.setImageResource(mDatas.get(position).getImgId());
viewHolder.txt_content.setText(mDatas.get(position).getContent());

return convertView;
}

static class ViewHolder{
ImageView img_icon;
TextView  txt_content;

}
}


activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.android_adapter_demon.MainActivity" >

<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" >
</ListView>
</LinearLayout>


item_list.xml

<?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"
android:orientation="horizontal" >

<ImageView
android:id="@+id/img_icon"
android:layout_width="56dp"
android:layout_height="56dp"/>

<TextView
android:id="@+id/txt_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:textSize="18sp" />
</LinearLayout>


MainActivity.java

public class MainActivity extends Activity {

private ListView listView;
private MyAdapter myAdapter=null;
private List<Data> mDatas = null;
private Context mContext=null;

private TextView txt_empty;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = MainActivity.this;
mDatas = new LinkedList<Data>();
myAdapter = new MyAdapter((LinkedList<Data>) mDatas, mContext);
bindViews();

}

private void  bindViews() {
listView = (ListView) findViewById(R.id.listView1);
txt_empty = (TextView) findViewById(R.id.txt_empty);
listView.setAdapter(myAdapter);

}

}




在activity_main.xml中添加

<TextView
android:id="@+id/txt_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="#000000"
android:textSize="15pt" />


MainActivity.java中的bindViews()方法中添加

listView = (ListView) findViewById(R.id.listView1);
txt_empty = (TextView) findViewById(R.id.txt_empty);

txt_empty.setText("暂无数据~");
listView.setAdapter(myAdapter);
listView.setEmptyView(txt_empty);


运行结果如下:



(三)添加一条数据

添加一个按钮,我们每按一次就添加一条记录

运行效果图:



代码实现

在我们自定义的BaseAdapter中添加方法:

//添加一个元素
public void add(Data data){
if (mDatas == null) {
mDatas = new LinkedList<>();
}
mDatas.add(data);
notifyDataSetChanged();

}


在MainActivty.java中添加:

public class MainActivity extends Activity implements OnClickListener{

private ListView listView;
private MyAdapter myAdapter=null;
private List<Data> mDatas = null;
private Context mContext=null;
//listview无数据时显示的TextView
private TextView txt_empty;
//向listView中添加一条数据
private Button btn_add;
private int flag = 1;
private Data mData_5 = null;   //用来临时放对象的

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = MainActivity.this;
mDatas = new LinkedList<Data>();
myAdapter = new MyAdapter((LinkedList<Data>) mDatas, mContext);
bindViews();

}

private void  bindViews() {
listView = (ListView) findViewById(R.id.listView1);
txt_empty = (TextView) findViewById(R.id.txt_empty);
btn_add = (Button) findViewById(R.id.btn_add);

txt_empty.setText("暂无数据~");
listView.setAdapter(myAdapter);
listView.setEmptyView(txt_empty);
btn_add.setOnClickListener((android.view.View.OnClickListener) this);
}

@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_add:
if(flag == 5){
mData_5 = new Data(R.drawable.cat,"你瞅啥~^(* ̄(oo) ̄)^~X" + flag);
myAdapter.add(mData_5);
}else{
myAdapter.add(new Data(R.drawable.cat,"你瞅啥~^(* ̄(oo) ̄)^~X" + flag));
}
flag++;
break;
}
}
}


activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.android_adapter_demon.MainActivity" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<Button
android:id="@+id/btn_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="添加一条记录" />
</LinearLayout>

<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" >
</ListView>

<TextView
android:id="@+id/txt_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="#000000"
android:textSize="15pt" />

</LinearLayout>


哇哈哈~~~向ListView中添加一条数据就是这么任性+简单,如果你想在Listview的特定位置插入一条数据,同理可以在Adapter中添加:

//往特定位置,添加一个元素
public void add(int position,Data data){
if (mData == null) {
mData = new LinkedList<>();
}
mData.add(position, data);
notifyDataSetChanged();
}


然后,添加一个按钮,写一个事件,搞定!

btn_add2 = (Button) findViewById(R.id.btn_add2);
btn_add2.setOnClickListener(this);
case R.id.btn_add2:
//position从0开始算的
myAdapter.add(1,new Data(R.drawable.cat,"瞅你咋地~^(* ̄(oo) ̄)^~X " + flag));
break;


运行结果:



(四)删除某一项



public void remove(Data data) {
if(mData != null) {
mData.remove(data);
}
notifyDataSetChanged();
}

public void remove(int position) {
if(mData != null) {
mData.remove(position);
}
notifyDataSetChanged();
}


然后加俩个Button,然后这样:

case R.id.btn_remove:
mAdapter.remove(mData_5);
break;
case R.id.btn_remove2:
mAdapter.remove(2);
break;


运行结果:



(五)移除所有的记录:



public void clear() {
if(mData != null) {
mData.clear();
}
notifyDataSetChanged();
}


(六)更新某一个记录




即可;

如果你觉得对你有帮助的话就帮我点个赞吧~<完>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息