Android(3)ListView

来源:互联网 发布:乐视投屏 for mac 编辑:程序博客网 时间:2024/06/14 02:54
MainActivity.java文件源代码如下
package com.example.administrator.lab3;import android.content.DialogInterface;import android.content.Intent;import android.database.Cursor;import android.graphics.Color;import android.provider.ContactsContract;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.LinearLayout;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.SimpleCursorAdapter;import android.widget.Toast;import java.util.ArrayList;import java.util.HashMap;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import static android.widget.Toast.LENGTH_SHORT;public class MainActivity extends AppCompatActivity{    LinearLayout m_LinearLayout;    ListView m_ListView;    List<Map<String,Object>> data = new ArrayList<>();    String [] name={"Aaron","Elvis","David","Edwin","Frank"            ,"Joshua","Ivan","Mark","Joseph","Phoebe"};    String [] phoneNumber={"17715523654","18825653224","15052116654","18854211875",            "13955188541","13621574410","15684122771","17765213579","13315466578","17895466428"};    String [] address={"江苏苏州电信","广东揭阳移动","江苏无锡移动","山东青岛移动","安徽合肥移动"            ,"江苏苏州移动","山东烟台联通","广东珠海电信","河北石家庄电信","山东东营移动"};    int [] color={R.color.color1,R.color.color2,R.color.color3,R.color.color4,R.color.color5,            R.color.color6,R.color.color7,R.color.color8,R.color.color9,R.color.color10};    String[] firstLetter={"A","E","D","E","F","J","I","M","J","P"};    List<Map<String,Object>>storeData(){        List<Map<String,Object>> list=new ArrayList<>();        for (int i=0;i<name.length;i++){            Map<String,Object> map=new HashMap<>();            map.put("first",firstLetter[i]);            map.put("text",name[i]);            map.put("address",address[i]);            map.put("phone",phoneNumber[i]);            map.put("background",color[i]);            list.add(map);        }        return list;    }    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        m_ListView = (ListView) findViewById(R.id.contactsList);        //获取数据存入data中        data=storeData();        //定义适配器        final SimpleAdapter adapterView=new SimpleAdapter(this,data,R.layout.item,                new String[]{"img","text","address","phone","background"},                new int[]{R.id.first,R.id.list_text,R.id.list_address,R.id.list_phoneNumber,R.id.list_background});        //最后要做的一步就是将适配器与listView绑定        m_ListView.setAdapter(adapterView);        m_ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                //获取点击位置的内容                HashMap<String,Object> map=(HashMap<String,Object>)m_ListView.getItemAtPosition(position);                //获取点击内容中联系人的姓名                String place_name=map.get("text").toString();                String place_address=map.get("address").toString();                String place_number=map.get("phone").toString();                int place_background=(int)map.get("background");                Intent intent=new Intent(MainActivity.this,Activity01.class);                intent.putExtra("name",place_name);                intent.putExtra("number",place_number);                intent.putExtra("address",place_address);                intent.putExtra("color",place_background);                startActivity(intent);            }        });        //listView的长按事件        m_ListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {            @Override            public boolean onItemLongClick(AdapterView<?> parent, View view,final int position, long id) {                HashMap<String,Object>map=(HashMap<String,Object>)m_ListView.getItemAtPosition(position);                String del_name=map.get("text").toString();                //定义一个对话框                AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);                builder.setTitle("删除联系人").setMessage("确定删除联系人"+del_name+"?");                builder.setNegativeButton("取消",new DialogInterface.OnClickListener(){                    @Override                    public void onClick(DialogInterface dialog, int which) {                    }                });                builder.setPositiveButton("确定",new DialogInterface.OnClickListener(){                    @Override                    public void onClick(DialogInterface dialog, int which) {                        data.remove(position);  //自带的删除和更新函数                        adapterView.notifyDataSetChanged();                    }                });                builder.show();                return true;  //没有return true而是false的话,长按和点击事件会一起触发            }        });    }}

Activity01.java:

package com.example.administrator.lab3;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.RelativeLayout;import android.widget.TextView;/** * Created by Administrator on 2016/10/13. */public class Activity01 extends Activity implements View.OnClickListener{    private String name,address,phoneNumber;    private int color;    private TextView textName,textAddress,textNumber;    private RelativeLayout relativeLayout;    private Button back,star;    private int flag=0;  //星星初始空心状态为0    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity01);        //得到传递过来的数据        Intent intent=getIntent();        name=intent.getStringExtra("name");        address=intent.getStringExtra("address");        phoneNumber=intent.getStringExtra("number");        color=intent.getIntExtra("color",0);        //实例化        textName=(TextView)findViewById(R.id.userName);        textNumber=(TextView)findViewById(R.id.phoneNumber);        textAddress=(TextView)findViewById(R.id.userAddress);        relativeLayout=(RelativeLayout)findViewById(R.id.relative);        back=(Button)findViewById(R.id.back);        star=(Button)findViewById(R.id.star);        //将得到的数据加载到联系人布局中        textNumber.setText(phoneNumber);        textAddress.setText(address);        textName.setText(name);        relativeLayout.setBackgroundResource(color);        back.setOnClickListener(this);        star.setOnClickListener(this);    }    //点击事件    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.back:                  finish();//返回初始界面                break;            case R.id.star:                //实现点击星星更换背景                if (flag==0){                    star.setBackgroundResource(R.mipmap.full_star);                    flag=1;                }else{                    star.setBackgroundResource(R.mipmap.empty_star);                    flag=0;                }                break;        }    }}
遇到的问题:

今日Android

  1. MainActivity.java里面的R全都飘红了,如何解决?

    clean project查看是否会变正常。如果还是不正常就说明资源文件有错误了,检查一下修改过的xml文件。检查发现 android:layout_weight="l"中打成了l(L),其实应该为数字1,表示权重。

  2. 自己在MainActivity.java中写了一些布局内容

    我们在创建程序时没有进行编码就可以直接运行程序,因为我们可以轻松第将代码和UI分开,在国际化和程序维护方面有着巨大的作用。比如说多国语言等,如果我们需要修改一些UI问题,就不必看代码了,直接修改布局文件即可。这需要开发者在开发时使用这种MVC框架(模型(model)-视图(view)-控制器(controller)),尽量减少使用“硬编码”。Activity是用来与用户交互的主要工具,称之为“活动”,大部分被使用到的其他页面也由不同的Activity实现,一个Activity通常就是一个单独的屏幕,每一个Activity都被实现为一个独立的类,并且从Activity基类(Android.app.Activity,Android提供的基层类)中及继承而来,通过父类的方法来实现各种功能。Activity将会显示由视图控件组成的用户接口,并对事件作出响应,大多数的应用都是由多个Activity组成,每个Activity都需要在AndroidManifest.xml文件中进行声明。

3.

onCreate()是什么函数?

所有继承自Activity的类都重写了onCreate函数,程序运行就会自动进入这个方法。Activity还有很多类似的方法,如onStart,onResume,

onPause,onDestory等,这些方法都是系统自动调用。其实这有关Android的生命周期:4.打包的apk在手机上运行直接闪退,在Studio的虚拟机中也提示无法运行。

通过询问TA,才发现在跑虚拟机的时候出现关键的一句错误提示:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.administrator.lab3/com.example.administrator.lab3.MainActivity}: java.lang.NullPointerException

也就是说出现了空指针,才发现自己在setContextView就通过findViewById实例化了2个对象,而在setContextView调用之前,也就是还没有读取布局的xml文件时,是找不到对应的id的控件的,那么那2个对象应该都是空的,那么后续对2个空的对象操作也就是非法的了。5.因为对控件的weight和width没搞清楚,而导致布局出现意想不到的问题。有一个网站解释的很好:https://my.oschina.net/jsan/blog/191492,也自己尝试一下2个水平TextView分别设置weight设置为0和1的情况。6.自己点击drawable新建的shape会自动成为layout下面的子文件?  不太记得了shape.xml的生成方法。


0 0
原创粉丝点击