ListView更新显示数据问题,我设置了一个按钮,想点下按钮就更新ListView显示的数据,现在我这个代码,点击了按钮之后,必须要滑动ListView才能将已显示的内容改变。如何实现我点了按钮之后就直接更改显示的内容呢?
以下是主要代码,我自定义了一个MyAdapter类,继承了BaseAdapter类:
package com.example.baseadapterdemo;import java.util.ArrayList;
import java.util.List;import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.ListView;
import com.example.bean.*;public class MainActivity extends Activity { private List<ItemBean> itemBeanList;
private ListView listview;
private MyAdapter myAdapter;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listview);
itemBeanList = new ArrayList<ItemBean>();
for(int i=0;i<10;i++){
itemBeanList.add(new ItemBean(
R.drawable.ic_launcher,
"标题" + i,
"内容:这是新闻页面" + i
));
}
myAdapter = new MyAdapter(this, itemBeanList);
listview.setAdapter(myAdapter);
handler = new Handler(){
public void handleMessage(android.os.Message msg) {
myAdapter = new MyAdapter(MainActivity.this, itemBeanList);
myAdapter.notifyDataSetChanged();
listview.setAdapter(myAdapter);
listview.invalidate();
};
};
}
public void ChangeList(View v){
itemBeanList.clear();
for(int i=0;i<10;i++){
itemBeanList.add(new ItemBean(
R.drawable.ic_launcher,
"更新的标题" + i,
"内容:这是新闻页面" + i
));
}
new Thread(){
public void run() {
handler.sendEmptyMessage(1);
};
};
}
}
我想要达到的效果如下图所示:当点击了改变ListView按钮,就改变页面所显示的内容,而不用做其他处理,也就是新内容替换掉旧内容,而不是在旧内容后面追加新内容,我要怎么做到呢?希望大家帮我提提修改意见,谢谢大家。
以下是主要代码,我自定义了一个MyAdapter类,继承了BaseAdapter类:
package com.example.baseadapterdemo;import java.util.ArrayList;
import java.util.List;import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.ListView;
import com.example.bean.*;public class MainActivity extends Activity { private List<ItemBean> itemBeanList;
private ListView listview;
private MyAdapter myAdapter;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listview);
itemBeanList = new ArrayList<ItemBean>();
for(int i=0;i<10;i++){
itemBeanList.add(new ItemBean(
R.drawable.ic_launcher,
"标题" + i,
"内容:这是新闻页面" + i
));
}
myAdapter = new MyAdapter(this, itemBeanList);
listview.setAdapter(myAdapter);
handler = new Handler(){
public void handleMessage(android.os.Message msg) {
myAdapter = new MyAdapter(MainActivity.this, itemBeanList);
myAdapter.notifyDataSetChanged();
listview.setAdapter(myAdapter);
listview.invalidate();
};
};
}
public void ChangeList(View v){
itemBeanList.clear();
for(int i=0;i<10;i++){
itemBeanList.add(new ItemBean(
R.drawable.ic_launcher,
"更新的标题" + i,
"内容:这是新闻页面" + i
));
}
new Thread(){
public void run() {
handler.sendEmptyMessage(1);
};
};
}
}
我想要达到的效果如下图所示:当点击了改变ListView按钮,就改变页面所显示的内容,而不用做其他处理,也就是新内容替换掉旧内容,而不是在旧内容后面追加新内容,我要怎么做到呢?希望大家帮我提提修改意见,谢谢大家。
解决方案 »
- Android游戏开发遇到小难题 ,大神来解,在线等待!!!
- 录像时调用MediaRecorder的start()时发生start failed: -19错误
- 安装应用程序后发送的那个广播,是怎样的
- android Bitmap压缩并转String
- 关于TextView的onDraw
- ListView失去focus后 如何仍然高亮?
- android配置环境出错
- SurfaceView视频播放弹出dialog后,视频有声音没有图象
- TimePicker中如何实现分钟时间间隔,只有选择0或者半小时这两个时间选择
- 大侠们我想问两个Android开发使用jsoup解析html的相关问题
- ProgressDialog无法使用
- 新建的app在清理后台时app没有调用onDestroy()方法,why?
2、可以直接在ChangeList(){中 myAdapter.notifyDataSetChanged();或listview.invalidate();不用再listview.setAdapter(myAdapter);我个人建议,并没有去运行哦
handler = new Handler(){
public void handleMessage(android.os.Message msg) {
myAdapter.notifyDataSetChanged();
};
};
private LayoutInflater mInflater;
private List<ItemBean> mData;
ItemBean itemBean;
public MyAdapter(Context context,List<ItemBean> mData){
//根据context上下文加载布局
this.mInflater = LayoutInflater.from(context);
//将传入的数据保存在mData中
this.mData=mData;
}
@Override
public int getCount() {
//How many items are in the data set represented by this Adapter.
//在此适配器中所代表的数据集中的条目数
return mData.size();
} @Override
public Object getItem(int position) {
// Get the data item associated with the specified position in the data set.
//获取数据集中与指定索引对应的数据项
return position;
} @Override
public long getItemId(int position) {
//Get the row id associated with the specified position in the list.
//获取在列表中与指定索引对应的行id
return position;
} @Override
//Get a View that displays the data at the specified position in the data set.
//获取一个在数据集中指定索引的视图来显示数据
public View getView(int position, View convertView, ViewGroup parent) {
//itemBean=getItem(position);
ViewHolder holder = null;
//如果缓存convertView为空,则需要创建View
if (convertView == null) {
//自定义的一个类用来缓存convertview
holder=new ViewHolder();
//根据自定义的Item布局加载布局
convertView = mInflater.inflate(R.layout.vlist, null);
holder.img = (ImageView)convertView.findViewById(R.id.img);
holder.titl = (TextView)convertView.findViewById(R.id.title);
holder.info = (TextView)convertView.findViewById(R.id.info);
//将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag
convertView.setTag(holder);
}else {
holder = (ViewHolder)convertView.getTag();
}
holder.img.setBackgroundResource((Integer)mData.get(position).getImageId());
holder.titl.setText((String)mData.get(position).getTitle());
holder.info.setText((String)mData.get(position).getContent()); return convertView;
}
class ViewHolder{
public ImageView img;
public TextView titl;
public TextView info;
}
}
public class MainActivity extends Activity{private List<ItemBean> itemBeanList;
private ListView listview;
private MyAdapter myAdapter;
private Handler handler;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try{
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listview);
button=(Button)findViewById(R.id.bt);
itemBeanList = new ArrayList<ItemBean>();
for(int i=0;i<10;i++){
itemBeanList.add(new ItemBean(
R.drawable.ic_launcher,
"标题" + i,
"内容:这是新闻页面" + i
));
}
myAdapter = new MyAdapter(this, itemBeanList);
listview.setAdapter(myAdapter);
handler = new Handler(){
public void handleMessage(android.os.Message msg) {
myAdapter = new MyAdapter(MainActivity.this, itemBeanList);
myAdapter.notifyDataSetChanged();
listview.setAdapter(myAdapter);
listview.invalidate();
};
};
}
catch (Exception e)
{
Toast.makeText(getApplication(),e.toString() ,Toast.LENGTH_LONG).show();
}
button.setOnClickListener(new OnClickListener()
{ @Override
public void onClick(View v)
{
//ChangeList(this);
itemBeanList.clear();
for(int i=0;i<10;i++){
itemBeanList.add(new ItemBean(
R.drawable.ic_launcher,
"更新的标题" + i,
"内容:这是新闻页面" + i
));
}
new Thread(){
public void run() {
handler.sendEmptyMessage(1);
};
};
}
} );
}
public void ChangeList(View v){
itemBeanList.clear();
for(int i=0;i<10;i++){
itemBeanList.add(new ItemBean(
R.drawable.ic_launcher,
"更新的标题" + i,
"内容:这是新闻页面" + i
));
}
new Thread(){
public void run() {
handler.sendEmptyMessage(1);
};
};
}
}
public void run() {
handler.sendEmptyMessage(1);
};
};改成myAdapter.notifyDataSetChanged();删除handler相关代码即可我不想多说,你thread写的太6了,会自动跑
private List<ItemBean> itemBeanList;
private ListView listview;
private MyAdapter myAdapter;
private Handler handler;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listview);
button=(Button)findViewById(R.id.bt);
itemBeanList = new ArrayList<ItemBean>();
for(int i=0;i<10;i++){
itemBeanList.add(new ItemBean(
R.drawable.ic_launcher,
"标题" + i,
"内容:这是新闻页面" + i
));
}
myAdapter = new MyAdapter(this, itemBeanList);
listview.setAdapter(myAdapter);
myAdapter = new MyAdapter(MainActivity.this, itemBeanList);
myAdapter.notifyDataSetChanged();
listview.setAdapter(myAdapter);
listview.invalidate();
button.setOnClickListener(new OnClickListener()
{ @Override
public void onClick(View v)
{
itemBeanList.clear();
for(int i=0;i<10;i++){
itemBeanList.add(new ItemBean(
R.drawable.ic_launcher,
"更新的标题" + i,
"内容:这是新闻页面" + i
));
}
myAdapter.notifyDataSetChanged();
}
});
}
}