zoukankan      html  css  js  c++  java
  • 线程02

    package jxnu.edu.cn.x3321;
    
    import android.os.Bundle;
    import android.os.Handler;
    
    import java.util.ArrayList;
    
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.view.Menu;
    import android.view.View;
    import android.widget.*;
    
    public class MainActivity extends Activity {
    
        //1.定义成员变量
        ListView lv;
        ArrayList<String> al=new ArrayList<String>();
        Button bt;
        ProgressDialog pd;
        //这次用post交互方式 所以直接定义hd就可以了,不用再sendmessage+handlemessage了!
        Handler hd=new Handler();
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        
            //2.初始化
            init();
            
            //3.准备数据
            for(int i=0;i<10;i++) {
                al.add("tom"+i);
            }
            
            //4.在lv下面增加一个loadmore
            bt=(Button)View.inflate(getApplicationContext(), R.layout.button, null);//inflate填充R.layout.button到这个bt里
            lv.addFooterView(bt);
            //见名知意 加到最下面 这个方便 
            
            //5.自定义适配器
            final MyAdapter ma=new MyAdapter(getApplicationContext(),al);
            
            //6.将适配器加载到lv中
            lv.setAdapter(ma);
            
            //7.定义、注册监听器
            lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getApplicationContext(), al.get(arg2), Toast.LENGTH_SHORT).show();
                }
                //al就是一个字符串数组,所以get直接得到字符串!
            });
            bt.setOnClickListener(new View.OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    pd.show();
                    //点按钮就立马显示progressdialog!
                    
                    //思考:这里为什么要用到线程
                    //因为pd显示时,主线程就在显示pd了,但是我们现在又需要去加载新的数据,所以这个地方就要用到子线程,子线程做完加载数据的事情之后
                    //就可以回到主线程做主线程应该做的工作
                    new Thread() {
                         public void run() {
                             //这里没有从服务器取数据来加载所以会很快,为了能看到pd显示出来的效果设置子线程休眠3秒
                             try {
                                Thread.sleep(2000);//单位毫秒
                                //如果这里不休眠,那pd显示出来几乎看不到,就第一次闪现了一下
                            } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                             for(int i=0;i<10;i++) {
                                 al.add("mike"+i);
                             }
                             hd.post(new Runnable() {//Runnable相当于跨到了主线程内执行了
    
                                 //这里就是想在主线程做的工作
                                @Override
                                public void run() {
                                    // TODO Auto-generated method stub
                                    
                                    ma.notifyDataSetChanged();
                                    //数据集改变了,通知适配器再封装一次
                                    
                                    pd.dismiss();
                                    //显示出了新数据就让加载圈圈消失
                                }
                                 
                             });
                         }
                    }.start();
                }
            });
            
        }
    
        private void init() {
            // TODO Auto-generated method stub
            lv=(ListView)this.findViewById(R.id.lv);
            pd=new ProgressDialog(this);
            pd.setCancelable(false);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
    }
  • 相关阅读:
    机器学习入门-数值特征-连续数据离散化(进行分段标记处理) 1.hist(Dataframe格式直接画直方图)
    机器学习入门-数值特征-进行多项式变化(将特征投影到高维度上) 1.PolynomialFeatures(将数据变化为多项式特征)
    读取配置文件包含properties和xml文件
    开发常用辅助软件
    将Solr的数据存到Hdfs上
    ClassPathXmlApplicationContext和FileSystemXmlApplicationContext区别
    Codis连接异常问题处理
    Ganglia安装
    Spark sql读取数据库和ES数据进行处理代码
    linux清理缓存的命令
  • 原文地址:https://www.cnblogs.com/hishark/p/7552825.html
Copyright © 2011-2022 走看看