RT ,现在这个事件更改的前提条件不是我应用能够控制的, 是一条服务器推送消息, 当我的后台服务得到这个推送通知后广播出来,在activiey里面注册一个广播接收者接收这个消息,然后需要根据这个推送通知里面的数据更改 listview指定某行的一个文本, 这个应该怎么实现?
解决方案 »
- 如何实现选中Gallery中的图片,在屏幕上四处移动?
- 其它类(非MainActivity的内部类)怎么去调用MainActivity中定义的方法(非静态方法)?
- 自己编的apk 运行不了
- android初学者问一个SQLite数据库的问题
- 如果不知道activity的名字,如何用intent启动别的程序?
- android中cursor未关闭,
- android图片轮放效果
- 关于 URI 的错误
- Android wifi与单片机通信
- 下载完API找不到api.chm文件
- 用下面的代码建了两个菜单,但是按下Menu键后还会自动出一个Settings的菜单是怎么回事?
- 更新Android开发环境后,写程序就没有图标了
下面是我看你问题写的,不知道,是不是你想要的结果:
所以先把数据放到List里面,然后针对你接到的通知,去修改list里面的值,去固定修改哪一行(也就是list里面某个地址的值,那样的话,顺序就不会改变。 下面的代码不适合删除,如果删除,顺序就会发生改变,那么就要做其他操作了),但还是要刷新adapter。package com.test;import java.util.ArrayList;
import java.util.List;import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;public class TestActivity extends Activity{ ListView listView = null;
private List<String> list = null;
private Context context;
private Thread thread;
private String[] str ={"あ","い","う","え","お","か","き","く","け","こ"};
private TextAdapter adapter = null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
context = this;
listView = (ListView)findViewById(R.id.listView);
list = getData();
adapter = new TextAdapter();
listView.setAdapter(adapter);
thread = new Thread(new MyThread());
thread.start();
}
class TextAdapter extends BaseAdapter{
public int getCount() {
return list.size();
} public Object getItem(int position) {
return position;
} public long getItemId(int position) {
return position;
} public View getView(int position, View convertView, ViewGroup parent) {
TextView view = new TextView(context);
view.setGravity(Gravity.CENTER_VERTICAL);
view.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.FILL_PARENT, 50));
view.setText(list.get(position));
return view;
}
}
int count = 0;
int count1 = 0;
MyHandler handler = new MyHandler();
class MyThread implements Runnable{
public void run() {
while(!Thread.currentThread().isInterrupted()){
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
if(count < 10 && count < str.length){
list.set(count, str[count]);
count++;
}else{
if(count1<10){
list.set(count1, "こんちは"+count1);
count1++;
if(count1==10){
count = 0;
count1 = 0;
}
}
}
Message msg = new Message();
msg.what =1;
handler.sendMessage(msg);
}
}
}
class MyHandler extends Handler{
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what==1){
if(adapter!=null){
adapter.notifyDataSetChanged();
}
}
}
}
private List<String> getData(){
List<String> list = new ArrayList<String>();
for(int i=0;i<10;i++){
list.add("こんちは"+i);
}
return list;
}
}
如果在可见区域,那你用下面方法更新吧
ListView lstres = (ListView)findViewById(R.id.ListView); for (int i = 0; i < lstres.getChildCount(); i++) {
RelativeLayout ll = (RelativeLayout)lstres.getChildAt(i);// 获得Item布局,i就是item的位置
editText= (EditText) ll.findViewById(R.id.image);// 从子级中获得控件
}
刷新肯定是不可以的, 你这种做法 我可以这么理解吗? 就是通过listview实例来获取指定行再获取textview,然后直接修改, 我先试试这种做法可行不