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; } }}遇到的问题:
MainActivity.java里面的R全都飘红了,如何解决?
clean project查看是否会变正常。如果还是不正常就说明资源文件有错误了,检查一下修改过的xml文件。检查发现 android:layout_weight="l"中打成了l(L),其实应该为数字1,表示权重。
自己在MainActivity.java中写了一些布局内容
我们在创建程序时没有进行编码就可以直接运行程序,因为我们可以轻松第将代码和UI分开,在国际化和程序维护方面有着巨大的作用。比如说多国语言等,如果我们需要修改一些UI问题,就不必查看代码了,直接修改布局文件即可。这需要开发者在开发时使用这种MVC框架(模型(model)-视图(view)-控制器(controller)),尽量减少使用“硬编码”。Activity是用来与用户交互的主要工具,称之为“活动”,大部分被使用到的其他页面也由不同的Activity实现,一个Activity通常就是一个单独的屏幕,每一个Activity都被实现为一个独立的类,并且从Activity基类(Android.app.Activity,Android提供的基层类)中及继承而来,通过父类的方法来实现各种功能。Activity将会显示由视图控件组成的用户接口,并对事件作出响应,大多数的应用都是由多个Activity组成,每个Activity都需要在AndroidManifest.xml文件中进行声明。
3.所有继承自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的生成方法。
- Android(3)ListView
- Android入门(3)ProgressBar和ListView
- Android ListView(干货)
- Android中Listview(二)--圆角listview
- Android中Listview(三)--圆角listview
- Android中Listview(四)--分组listview
- Android中Listview(五)--拖拽listview
- Android中Listview(六)--索引ListView
- Android中Listview(七)--排序ListView
- Android listview入门(listview适配器Adapter)
- android学习笔记3-listView
- Android 4.4.3 ListView 类图
- Android常用控件:ListView(3)
- android自助点单APP(3)ListView中嵌套ListView
- Android ListView详解(一)
- Android ListView详解(二)
- Android ListView详解(三)
- Android组件 列表(ListView)
- 全废话SQL Server统计信息(1)——统计信息简介
- 在一个千万级的数据库查寻中,如何提高查询效率?
- C++ 多态性实现及原理详细解析
- UOJ 245 [UER #7]天路
- 较好的vector容器输出代码片段
- Android(3)ListView
- Java类之间的关系
- ios、html加密
- Android弹窗PopupWindow
- 跳转WIFi设置
- android导入项目汉字乱码
- Android studio打包应用程序出现 '注: 某些输入文件使用或覆盖了已过时的 API'
- Android 使用9Patch图片做背景
- PS(PhotoShop)替换纯色图片的颜色