zoukankan      html  css  js  c++  java
  • 今日十问

    1、怎样在MainActivity中为Button的点击事件绑定一个监听器?(四种方式)
    <1>a.查找控件
    //查找控件按钮
    private Button button1;
    button1 = (Button) findViewById(R.id.button1);
       b.创建一个类,实现OnClickListener接口,重写里面的OnClick()方法
    //OnClickListener()是按钮的监听器类对象,当按钮被点击的时候。
    class MyListener  implements  OnClickListener{
    //当按钮被点击的时候,会自动调用的方法
    @Override
    //v:事件源。被点击的那个控件
    public void OnClick(View v){
    //这里写被点击之后要执行的任务
    button1.setText("点击之后改变的文本内容"+new Date());
    }
    }
       c.用查找到的控件去绑定监听器对象。(按钮对象.setOnClickListener(监听器对象))
    MyListener  listener =new MyListener();
    //绑定按钮的被点击的监听器
    button1.setOnClickListener(listener);
    <2>a.查找控件
    private  Button  button2;
    button2=(Button) findViewById(R.id.button2);
       b.让当前类实现OnClickListener接口,重写里面的OnClick()方法
    public class MainActivity extends Activity implements OnClickListener{
    @Override
    public void onClick(View v) {
    //在这里写当按钮被点击之后要做的任务
    ......
    }
    }
       c.用查找到的控件去绑定监听器对象。(按钮对象.setOnClickListener(this))
    button2.setOnClickListener(this);
    <3>a.查找控件
    private Button button3;
    button3=(Button)findViewById(R.id.button3);
       b.用匿名内部类绑定监听器
    button3.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    //在这里写当按钮被点击之后要做的任务
    ......
    }
    });
    <4>a.查找布局
    private LinearLayout layout;
    layout=(LinearLayout)findViewById(R.id.layout);
       b.在控件的属性中声明OnClick="方法名"
    android:onClick="btnChange"
       c.在java文件中写一个方法
    public void 方法名(View v){
    //在这里写当按钮被点击之后要做的任务
    ......
    }
    总结:如果有多个按钮绑定同一个监听器,除了匿名内部类的写法,其他三种方法都可以。
    2、怎么实现多个按钮绑定同一个监听器?
    <1>查找控件
    private Button btn_showText;
    provate Button btn_showLog;
    btn_showText=(Button)findViewById(R.id.btn_showText);
    btn_showLog=(Button)findViewById(R.id.btn_showLog);
    <2>创建一个类,实现OnClickListener接口,重写里面的OnClick()方法
    class  BtnListener implements OnClickListener{
    @Override
    public void onClick(View v) {
    //获取事件源(被点击的按钮)的id
    int id=v.getId();
    switch(id){
    case R.id.btn_showLog:
    //这里写当点击btn_showLog是要完成的任务
    ......
    break;
    case R.id.btn_showText:
    //这里写当点击btn_showText是要完成的任务
    ......
    break;
    ....
    }
    }
    <3>用查找到的控件去绑定同一个监听器对象
    BtnListener  listener =new BtnListener();
    //两个按钮绑定的监听器对象为同一个
    btn_showText.setOnClickListener(listener);
    btn_showLog.setOnClickListener(listener);
    3、怎么创建一个Activity?
    <1>创建一个类,继承Activity
    public class SecondActivity extends Activity{}
    <2>重写onCreate()生命周期方法,并且在里面调用setContentView()方法绑定要显示的布局文件
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_second);
    }
    <3>在清单配置文件中注册
    <!--  注册activity    只需要写一个必要的属性name-->
    <activity android:name="com.qf.day03buttondemo.SecondActivity">
    <!-- intent-filter:代表当前的activity是第一个启动的页面 -->
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    4、sp、dp、dip、dpi、pt、px等单位的区别是什么?
    <1>dpi
    dpi指像素密度。dots  per  inch ,即每英寸内像素点的个数。它不是表示长度的单位。在android中认为:低(120dpi),中(160dpi),高(240dpi),超高(320dpi)。随着技术的增长,实际dpi已经超出这个定义范围。
    <2>dip
    device  independent  pixels ,即与设备无关的像素。目前这个单位已经被dp所取代,而不建议使用dip.
    <3>dp
    与dip概念一样。不过dp已经取代了dip。在Android中用来表示非文字大小的尺寸。例如:外边距、内填充等。
    <4>sp
    scale  indepentdent  pixel ,即与缩放比例无关的像素。在android中常用来表示文字大小。
    <5>px
    表示像素。因为同样是200px,但是在不同手机下显示的大小是不同的。
    <6>pt
    point磅。1磅=1/74英寸
    总结:dp是用来定义非文字的尺寸,sp用来定义文字大小。px只用于产生一条一像素的分割线时使用。
    5、一个适配器控件通过一个适配器展示数据的步骤。
    <1>查找控件
    private  Spinner  spinner;
    spinner = (Spinner) findViewById(R.id.spinner);
    <2>生成数据源
    private ArrayList<String> data=new ArrayList<String>();
    //初始化一个数据源链表
    private void initData(){
    数据内容
    }
    //调用数据源
    initData();
    <3>构造适配器对象
    private ArrayAdapter<String> adapter;
    adapter=new ArrayAdapter<String>(this,R.layout.item1);//两参的构造方法
    第一个参数:上下文对象
    第二个参数:展示数据的布局文件
    adapter=new ArrayAdapter<String>(this,R.layout.item1,data);//三参的构造方法
    第一个参数:上下文对象
    第二个参数:展示数据的布局文件
    第三个参数:数据源(可以是链表,也可以是数组)
    adapter =new ArrayAdapter<String>(this,R.layout.item2,R.id.textView,data);//四参的构造方法
    第一个参数:上下文对象
    第二个参数:展示数据的布局文件(不是以TextView作为根节点)
    第三个参数:item2中要展示数据的TextView控件的id
    第四个参数:数据源
    adapter = new SimpleAdapter(this,data,R.layout.item,new String[]{"name","age","icon"},new int[]{R.id.name,R.id.age,R.id.icon})
    第一个参数:上下文对象
    第二个参数:数据源
    第三个参数:展示数据的布局文件
    第四个参数:map存储的key值
    第五个参数:要对应的value值的控件id
    <4>把数据和适配器产生联系(三参、四参的构造方法在构造适配器时就产生联系)
    adapter.add("data1");//添加一条数据
    adapter.addAll(data);//添加一个链表数据
    <5>把适配器和控件绑定(控件.setAdapter(适配器))
    spinner.setAdapter(adapter);
    //当数据原发生了变化时,及时通知适配器更新
    adapter.notifyDataSetChanged();
    <6>spinner的选中其中一项数据时候的监听器(OnItemSelectedListener)
    需要重写的方法是:
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position,long id) {
    /*
      parent:指发生选择事件的适配器控件;
      view:指代spinner里面发生选择事件的item的布局视图
      position:发生选择事件的item的位置信息(从0开始一次增加)
      id:发生选择事件的item的行号id
    */
    //需要执行的逻辑代码,如下例:
    //把被点击的视图对象转变成TextView对象
    TextView TextView=(TextView) view;
    String string=textView.getText().toString();
    //获取对应的spinner的位置上的展示信息
    String string2=(String) parent.getItemAtPosition(position);
    }
    @Override
    public void onNothingSelected(AdapterView<?> parent) {
    //需要执行的逻辑代码
    }
    6、为什么将android:layout_weight属性的值同时指定为1就会平分屏幕宽度呢?
    系统会先把LInearLayout下所有控件指定的layout_weight值相加,得到一个总值,然后每一个控件所占大小的比例就是用该控件的layout_weight值除以刚才算出的总值。
    7、MVC开发模型
    MVC(Model-View-Controller):M是指逻辑模型,V是指视图模型,C则是控制器。一个逻辑模型可以对于多种视图模型,比如一批统计数据可以分别用柱状图、饼图来表示。一种视图模型也可以对于多种逻辑模型。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式,而C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新,与设计模式中的观察者模式是完全一样。
    MVC的好处:从用户的角度出发,用户可以根据自己的需求。选择自己合适的浏览数据的方式。比如说,对于一篇在线文档,用户可以选择以HTML网页的方式阅读,也可以选择以PDF的方式阅读。从开发者的角度,MVC把应用程序的逻辑层与界面开发是完全分开的,最大的好处是:界面设计人员可以直接参与界面开发,程序员就可以把精力放在逻辑层上。而不是像以前那样,设计人员把所有的材料交给开发人员,由开发人员来实现界面。在Eclipse工具中开发Android采用了更加简单的方法,设计人员在DroidDraw中设计界面,以XML方式保存,在Eclipse中直接打开就可以看到设计人员设计的界面。
    Android中界面部分也采用了当前比较流行的MVC框架,在Android中:
    1)视图层(View):一般采用XML文件进行界面的描述,使用的时候可以非常方便的引入。当然,如果你对Android了解的比较多了的话,就一定可以想到在Android中也可以使用JavaScript+HTML等的方式作为View层,当然这里需要进行Java和JAvaScript之间的通信,幸运的是,Android提供了它们之间非常方便的通信实现。
    2)控制层(Controller):Android的控制层的重任常落在了众多的Activity的肩上,这句话暗示了不要在Activity中写代码,要通过Activity交割Model业务逻辑层处理,这样做的另外一个原因是Android中的Activity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。
    3)模型层(Model):对数据库的操作、对网络等的操作都应该在Model里面处理,当然对业务计算等操作也是必须放在该层的,就是应用程序中的二进制数据。
    在Android SDK中的数据绑定,也都是采用了与MVC框架类似的方法来显示数据。在控制层上将数据按照视图模型的要求(也就是Adapter)封装就可以直接在视图模型上显示了,从而实现了数据绑定。比如显示Cursor中所有数据的ListActivity,其视图层就是一个ListView,将数据封装为ListAdapter,并传递给ListView,数据就在LIstView中实现。
  • 相关阅读:
    变量在原型链中的查找顺序
    new 运算符干了什么
    一道关于变量升级问题的题目
    【c#.Net】c#.Net基础入门(数组和循环)
    【C#.Net】c#.Net基础入门(运算符和分支结构)
    【Python】【Django】查询所有学生信息
    【Python】【Django】admin后台管理类操作数据库
    【Python】【Django】用户注册功能
    【Python】【Django】PythonWeb框架基本知识
    【转】【接口测试】接口测试与postman
  • 原文地址:https://www.cnblogs.com/android-blogs/p/5683708.html
Copyright © 2011-2022 走看看