界面更新 listview-Handler里面不能更新界面 包括List和Button的显示 求大神解答

问题描述

Handler里面不能更新界面 包括List和Button的显示 求大神解答

首先设置的是Activity的OnCrate方法

 public class CreateActivity extends Activity{
    protected static CharSequence text = "Waiting Range";
public static MobilocMaster mobilocMaster  = new MobilocMaster();
    public static MobilocAnchor mobilocAnchor  = new MobilocAnchor();
    public static LoopThread lt;
    Button mButton;
    static boolean started = false;
    Handler handler;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    setContentView(R.layout.create);
    ini(!started);
    mButton = (Button) findViewById(R.id.button);
    mButton.setText(text);
    mButton.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {
            Intent intent1 = new Intent(CreateActivity.this,CoordinateActivity.class);
            startActivity(intent1);
           }
        });

然后是处理函数和初始化

public void handleMessage(Message msg) {
               switch (msg.what) {
               case 1:
                   text = "Waiting Range";
                   mButton.setEnabled(false);
                   mButton.setText(text);
                   data.clear();
                   Hashtable<String,myAnchorInfo> temp = (Hashtable<String,myAnchorInfo>)msg.obj;
                   Enumeration t = temp.keys();
                   while(t.hasMoreElements()) {
                        String t1 = (String)t.nextElement();
                        myAnchorInfo myi = (myAnchorInfo)temp.get(t1);
                        map = new HashMap<String, String>();
                        map.clear();
                        map.put("name", myi.name);
                        map.put("ip", myi.ip);
                        map.put("range", myi.range);
                        data.add(map);
                   }
                   adapter.notifyDataSetChanged();
                   System.out.println(data.toString()+"Data的数据[test]");
                   System.out.println("Handler更新界面--->Waiting Range[test]");
                   break;
               case 2:
                   text = "Look Position";
                   mButton.setEnabled(true);
                   mButton.setText(text);
                   data.clear();
                   Hashtable<String,myAnchorInfo> temp1 = (Hashtable<String,myAnchorInfo>)msg.obj;
                   System.out.println(msg.obj.toString()+"Message的信息[test]");
                   Enumeration t2 = temp1.keys();
                   while(t2.hasMoreElements()) {
                        String t3 = (String)t2.nextElement();
                        myAnchorInfo myi = (myAnchorInfo)temp1.get(t3);
                        map = new HashMap<String, String>();
                        map.clear();
                        map.put("name", myi.name);
                        map.put("ip", myi.ip);
                        map.put("range", myi.range);
                        data.add(map);
                   }
                   adapter.notifyDataSetChanged();
                   System.out.println(data.toString()+"Data的数据[test]");
                   System.out.println("Handler更新界面--->Look Position[test]");
                   break;
               }
           }
       };
}
void ini(Boolean flag){
    if(flag)
    {
        Intent intent = getIntent();
        String myname = intent.getStringExtra("myName");
        rangingSettings();
        mobilocAnchor.setAnchorName(myname);
        mobilocMaster.start();
        mobilocAnchor.start();

        ListView lv = (ListView) findViewById(R.id.list1);
        String[] from = new String[]{"name" , "ip", "range"};
        int[] to = new int[]{R.id.person_name , R.id.person_ip , R.id.person_range};
        adapter = new SimpleAdapter(this, data,R.layout.child_create, from,to);
        lv.setAdapter(adapter);
        started = true;

       lt = new LoopThread();
       lt.start();
    }
}

最后是子线程来更新数据

class LoopThread extends Thread{
    Boolean flag = true;
    public void run() {
            while(true) {
                try {
                    Thread.sleep(3000);
                    tempAnchor.clear();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                while(true){
                    try {
                        Thread.sleep(300);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    if(mobilocAnchor.getMyAddress()!= null){
                        myAnchor = new AnchorInfo(mobilocAnchor.getMyAddress());
                        break;
                    }
                }
                Enumeration akey = MobilocMaster.anchorTable.keys();
                Enumeration rkey = MobilocMaster.rangingTable.keys();
                while(akey.hasMoreElements()) {
                    AnchorNetInfo key1 = (AnchorNetInfo)akey.nextElement();
                    AnchorInfo ai = (AnchorInfo)MobilocMaster.anchorTable.get(key1);
                    if(myAnchor.getHostString().contains(ai.getHostString()))
                        continue;
                    tempInfo.setAnchorInfo(ai.getName(), ai.getIP());
                    myAnchorPair = new AnchorPair(myAnchor.getHostString(),ai.getHostString());
                    if(LocationAnchor.readyForRanging){
                        tempInfo.setRange(MobilocAnchor.rangingTable.get(myAnchorPair).getDistance());
                        tempAnchor.put(ai.getName(),tempInfo);
                        flag = false;
                    }
                    else{
                        tempInfo.setRange("Ranging");
                        tempAnchor.put(ai.getName(),tempInfo);
                    }
                }
                if(flag){
                    Message message = new Message();
                    message.what = 1;
                    message.obj = tempAnchor;
                    System.out.println(message.obj.toString()+"主线程Message信息[test]");
                    handler.sendMessage(message);
                }
                else
                {
                    Message message1 = new Message();
                    message1.what = 2;
                    message1.obj = tempAnchor;
                    handler.sendMessage(message1);
                    System.out.println(message1.obj.toString()+"主线程Message1信息[test]");
                    flag = true;
                }
            }

    }
   } 

class myAnchorInfo{
    String name;
    String range;
    String ip;

    public void setAnchorInfo(String name,String ip){
        this.name = name;
        this.ip = ip;
    }

    public void setRange(float ft){
        this.range = (float)(Math.round(ft*100))/100+"";
    }

    public void setRange(String range){
        this.range = range;
    }
}
时间: 2024-12-09 23:45:39

界面更新 listview-Handler里面不能更新界面 包括List和Button的显示 求大神解答的相关文章

svn-通过SVN更新别人的代码到我的eclipse中为什么报错,求大神解答

问题描述 通过SVN更新别人的代码到我的eclipse中为什么报错,求大神解答 解决方案 这个不影响项目运行的, 解决方案二: 这是纠错器的原因,并不影响运行.有时候莫名其妙就好了. 解决方案三: 你看看是什么错误, 有些是因为对你的xml 文件进行合法性验证. 解决方案四: 谢谢.csdn真强大,第一次用就有答案 解决方案五: 这是纠错器的原因,并不影响运行.有时候莫名其妙就好了. 解决方案六: myeclipse对xml以及js验证问题,,可以忽略 解决方案七: 不影响运行的话不用过于在意.

新闻类app界面设计问题,求大神解答

问题描述 新闻类app界面设计问题,求大神解答 我们需要做一款app,页面上有一个页面,类似于今日头条的新闻详细页面,上面是新闻,新闻下面是一条条评论.我的想法是一条条评论是一个Listview,那么上面的新闻内容部分通过一个head来实现吗?还是有其他的实现方式,如果不这么设计的话,那就要用scrollview 了,那用listview的意义不就没了??求大神帮忙解答 解决方案 scrollview的做法更符合自然,不是说用listview不行,而是用户体验比较怪,违反直觉.这个你不能用我怎么

浏览器不知道怎么了,进不去网页,出现以下这个界面,这种情况怎么解决?求大神解答

问题描述 浏览器不知道怎么了,进不去网页,出现以下这个界面,这种情况怎么解决?求大神解答 400Bad Request 400 Bad Request nginx 解决方案 除了q107770540 说的这些,看一下DNS cache 解决方案二: 打开IE 在"Internet选项"里选择删除COOKIES 删除文件就可以了答3023案补充够详细的了.答3023案补充打开IE(你看网页的那个),然后点"工具"--Internet选项--Internet临时文件--

sql server-sqlserver跨服务器更新数据出错,求大神解答

问题描述 sqlserver跨服务器更新数据出错,求大神解答 sqlserver在跨服务器更新数据时报这个错,图片中的日文可以先忽略,有遇到报图片中相同英文内容的大神给解答解答 ![图片说明](http://img.ask.csdn.net/upload/201509/27/1443353882_746795.png) 解决方案 这看上去根本不是sql server的错误,而是Silverlight的错误.你的Silverlight丢出了异步的错误,没有捕获到.具体要看你的代码. 解决方案二:

mysql char类型主键做查询、更新条件时遇见怪事了,求大神解答

问题描述 mysql char类型主键做查询.更新条件时遇见怪事了,求大神解答 mysql> desc card_info; +-------------+-----------+------+-----+-------------------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+-----------+------+-----+-------------------+-------+ |

数据库-关于原生mysql语句多表查询更新字段问题 求大神解答

问题描述 关于原生mysql语句多表查询更新字段问题 求大神解答 如题:a表user_id school_id1233 220132346 220172344 234452247 22017... ... b表user_id term2346 12346 12346 22247 21233 1... ... 如上两张表:根据a表中的school_id=22017 得到它的user_id 然后根据此user_id得到b表中的term 并把term=1的变为term=2,把term=2的变为term

ios- 同一界面下 两个collectionView 如何使用 求大神解答

问题描述 同一界面下 两个collectionView 如何使用 求大神解答 我想在一个controller下做两个不section 和cell 数不同的 collectionView 请大神指教 给跪了!!! #import "ViewController.h" #define Screen_Width [UIScreen mainScreen].bounds.size.width //获取屏幕高度 #define Screen_Height [UIScreen mainScreen

跪求大神解答-如何用vB设计界面,请赐教

问题描述 如何用vB设计界面,请赐教 如何用vB设计界面,控制EXcel文件,如有视频教程最好了,我是零基础,但上进,请赐教,感激不尽 解决方案 VB的界面设计~ 值得一看VB登录界面设计代码

求大神解答一下-做一个电影票务信息管理系统怎么办?用java或者mfc做界面极其数据库的操作程序

问题描述 做一个电影票务信息管理系统怎么办?用java或者mfc做界面极其数据库的操作程序 做一个电影票务信息管理系统怎么办?用java或者mfc做界面极其数据库的操作程序 解决方案 http://download.csdn.net/download/u010073161/6602737 解决方案二: http://download.csdn.net/download/albertcd/4312612 解决方案三: 这种建议使用C#的Winform开发