当前位置:  编程技术>移动开发
本页文章导读:
    ▪重写listview(可能定义listview)        重写listview(或者定义listview) 之前工作当中虽然做android开发但是细想起来UI 部分还真是接触的少了一些,所以接下来的一段时间决定好好补习UI,这不是今天我在看自定义的 listview(以前也.........
    ▪ 两个简略的小软件        两个简单的小软件。 1、查询淘宝用户的基本信息淘宝信誉情况一键查看2、利用SSH链接Linux并执行基本指令手机看linux,边走边工作链接linux服务器,并执行简单的指令,让我们时时刻刻关.........
    ▪ @property参数叨明       @property参数说明 @property (readonly, nonatomic, retain)这是在接口文件内经常使用的方法,以下是对property参数的解释:访问控制:readonly表示这个属性是只读的,就是只生成getter方法,不会生成se.........

[1]重写listview(可能定义listview)
    来源: 互联网  发布时间: 2014-02-18
重写listview(或者定义listview)
之前工作当中虽然做android开发但是细想起来UI 部分还真是接触的少了一些,所以接下来的一段时间决定好好补习UI,这不是今天我在看自定义的 listview(以前也有看过但是没有仔细看)。

那么今天呢,我打算比葫芦画瓢 然后添加我自己的理解 看看大家觉得怎么样?是不是也和我有同样的理解呢?

先来简单的看看关于listview的东西。。。。第一:那就是listview了。。这个东西不用说的

第二:很重要的就是这个东西了。。Adapter 适配器。。。是的,那么到底要怎么用呢?

Adapter下面有三个子类 SimpleAdapter SimpleCursorAdapter ArrayAdapter(SimpleCursorAdapter  的父类 CursorAdapter 才是直接继承BaseAdapter的)

那么我们这里提到的自定义Listview用的就是第一个,因为他可扩展性好,你可能会想“难道后面两个就不行了么?” 答案是 肯定的。。。从SimpleCursorAdapter字面上可以看出 “游标适配器” 它主要是用来 包装从数据库查询出来的,而ArrayAdapter则是包装数据 类型的数据的。
稍后你会看到具体的例子。

好吧我们接下来看看具体的例子:
ArrayAdapter

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SimpleCursorAdapter;

public class MainActivity extends Activity {
	private ListView listView;
	private ArrayAdapter arrayAdapter;
	private List<String> list;
	private Cursor    cursor;
	private SimpleCursorAdapter cursorAdapter;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        /****这个东西 是 演示arrayAdapter***/
        listView  = new ListView(this);
        list      = new ArrayList<String>();
        list.add("123");
        list.add("123");
        list.add("123");
        arrayAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,list);
        listView.setAdapter(arrayAdapter);
    }

SimpleCursorAdapter

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SimpleCursorAdapter;

public class MainActivity extends Activity {
	private ListView listView;
	private ArrayAdapter arrayAdapter;
	private List<String> list;
	private Cursor    cursor;
	private SimpleCursorAdapter cursorAdapter;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        listView  =  new ListView(this);
        cursor    = getContentResolver().query(People.CONTENT_URI, null, null, null, null);
        //activity开始管理 cursor  省去了我们手动管理 cursor 
        startManagingCursor(cursor);
        cursorAdapter = new SimpleCursorAdapter(this,android.R.layout.simple_expandable_list_item_2,cursor,new String[]{People.NAME},new int[]{android.R.id.text1});
        listView.setAdapter(cursorAdapter);  
    }  
}




这里对于ArrayAdapter 和SimpleCursorAdapter 不做过多的解释。


SimpleAdapter 是我们的重点,因为大多数情况下 我们的需求以上两个Adapter是满足不了的
这个时候我们就需要重新 自定义自己的 ListView了。。

那自定义自己的ListView最主要的就是重写Adapter。我们先看看SimpleAdapter  的应用
之后在重写自己的。


import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.SimpleAdapter;

public class MainListActivity extends [color=red]ListActivity[/color]{

	private SimpleAdapter simpleAdapter;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("title", "G1");
                map.put("info", "google 1");
                map.put("img", R.drawable.icon);
                list.add(map);

		simpleAdapter = new SimpleAdapter(this, list, R.layout.main_list_view, new String[]{"title","info","image"}, new int[]{R.id.title,R.id.info,R.id.img});
		setListAdapter(simpleAdapter);
	}


可以看到它是按照行来显示的,但是通常我们可能在每一个Item中要做单选radio 或者 复选check等等而且还要为这些按钮添加相应的事件,那么这个时候该怎么办呢?

解决的方法就是自定义Adapter了。。。

下面来看看整个过程:

第一步:我们要创建Acitivyt继承 ListActivity

第二步:创建之后我们要定义自己的数据结构(因为这个地方我们传给SimpleAdapter)这个地方的数据结构格式是这样的List<? extends Map<String,?>> 所以呢这个地方我们一点过要首先产生自己的数据!

第三步:就是要继承BaseAdapter重写Adapter了



import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
[color=red]//第一步[/color]
public class MainListActivtiy2 extends ListActivity{

	private List<Map<String,Object>> list;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
[color=darkred]//第二步[/color]
		list = new ArrayList<Map<String,Object>>();
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("titile", "标题");
		map.put("info",   "信息");
		map.put("image",  "图片");
		list.add(map);
		
		MyAdapter  adapter = new MyAdapter(this);
		
		setListAdapter(adapter);
	}
	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		Log.v("MyListView4-click", (String)list.get(position).get("title"));		
	}
	public void showDialog(){
		 new AlertDialog.Builder(this)
		         .setTitle("我的listview")
		         .setMessage("介绍...")
		         .setPositiveButton("确定", new DialogInterface.OnClickListener() {
		             @Override
		             public void onClick(DialogInterface dialog, int which) {}
		         })
		         .show();
	}
[color=red]//第三步[/color]
	private class MyAdapter extends BaseAdapter{
		private LayoutInflater layouInflater;
		public MyAdapter(Context context){
			layouInflater = LayoutInflater.from(context);
		}
//这个地方时最关键的 你返回的数字是 几 那么listview中就会出现多少个数据(ITEM)
		@Override
		public int getCount() {
			return list.size();
		}

		@Override
		public Object getItem(int position) {
			return null;
		}

		@Override
		public long getItemId(int position) {
			return 0;
		}
//这个地方时最关键的
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder holder = null;
			if(convertView == null){
				holder = new ViewHolder();
				convertView = layouInflater.inflate(R.layout.main_list_view2, null);
				holder.img  = (ImageView)convertView.findViewById(R.id.img);
				holder.info = (TextView) convertView.findViewById(R.id.info);
				holder.title= (TextView) convertView.findViewById(R.id.title);
				holder.btn  = (Button) convertView.findViewById(R.id.view_btn);
				convertView.setTag(holder);
			}
			else{
				holder  = (ViewHolder)convertView.getTag();
			}
			holder.img.setBackgroundResource((Integer)list.get(position).get("image"));
			holder.title.setText((String)list.get(position).get("title"));
			holder.info.setText((String)list.get(position).get("info"));
			holder.btn.setOnClickListener(new View.OnClickListener() {
				
				@Override
				public void onClick(View v) {
					showDialog();
				}
			});
			return convertView;
		}
		
		public final class ViewHolder{
			  public ImageView img;
	          public TextView title;
	          public TextView info;
	          public Button   btn;
		} 
	}


这里我说说自己的理解啊。

为什么要这么做
这个地方时最关键的 你返回的数字是 几 那么listview中就会出现多少个数据(ITEM)
		@Override
		public int getCount() {
			return list.size();
		}


因为在Adapter中实例化 convertView之后会先调用getcount 方法 因为Adapter 想要知道 你

要返回多少数据在ListView 中显示如果你返回的是0 那么结果可想而知 listview中没有显示,你返回的是2 那就显示出两个(其实仔细想想你会发现 如果你做分页的话不知道能不能从这个地方入手 或者 做 动态地加载也就是 你滚动到listview底部的时候才继续加载)。。。

我觉得应该可以从这个地方入手的。。。

然后我们说说getView 这个方法,这里面的view 都是通过LayoutInflater 动态实例化的

而且是每实例化一次就要调用一次getView 方法(view 里面的数据就是ViewHolder对象)。

好了看到这里估计你也应该明白自定义 ListView 的 过程了。










    
[2] 两个简略的小软件
    来源: 互联网  发布时间: 2014-02-18
两个简单的小软件。
1、查询淘宝用户的基本信息
淘宝信誉情况一键查看
2、利用SSH链接Linux并执行基本指令
手机看linux,边走边工作
链接linux服务器,并执行简单的指令,让我们时时刻刻关注工作。

有些简陋,请见谅

    
[3] @property参数叨明
    来源: 互联网  发布时间: 2014-02-18
@property参数说明
@property (readonly, nonatomic, retain)

这是在接口文件内经常使用的方法,以下是对property参数的解释:

访问控制:
  • readonly表示这个属性是只读的,就是只生成getter方法,不会生成setter方法.
  • readwrite设置可供访问级别
内存管理:
  • retain 是说明该属性在赋值的时候,先release之前的值,然后再赋新值给属性并把引用再加1
线程同步:
  • nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3