android 动态修改listView的样式以及给listView添加事件

首先自定义适配器(Adapter)

public class MyAdapter extends BaseAdapter{
	private LayoutInflater mInflater;
	private List<Map<String, Object>> mData;
	public MyAdapter(Context context,List<Map<String, Object>> news){
		this.mInflater = LayoutInflater.from(context);
		this.mData=news;
	}
@Override public int getCount() { // TODO Auto-generated method stub return this.mData.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder=new ViewHolder(); convertView = mInflater.inflate(R.layout.lvw_custom, null); convertView.setTag(holder); }else { holder = (ViewHolder)convertView.getTag(); } holder.lvw_custom_name = (TextView)convertView.findViewById(R.id.lvw_custom_name); holder.lvw_custom_description = (TextView)convertView.findViewById(R.id.lvw_custom_description); holder.received = (TextView)convertView.findViewById(R.id.received); holder.pm_id = (TextView)convertView.findViewById(R.id.pm_id); holder.lvw_custom_name.setText((String)mData.get(position).get("lvw_custom_name")); holder.lvw_custom_description.setText((String)mData.get(position).get("lvw_custom_description")); holder.received.setText((String)mData.get(position).get("received")); holder.pm_id.setText((String)mData.get(position).get("pm_id")); Log.w("getView: ", holder.received.getText().toString()); if(holder.received.getText().equals("0")){ //根据内容不同,字体显示不同颜色 Log.w("getView: ", "change"); holder.lvw_custom_name.setTextColor(Color.parseColor("#FF9900")); holder.lvw_custom_description.setTextColor(Color.parseColor("#FF9900")); }else{ holder.lvw_custom_name.setTextColor(Color.parseColor("#ff000000")); holder.lvw_custom_description.setTextColor(Color.parseColor("#ff000000")); } return convertView; } public final class ViewHolder{ public TextView lvw_custom_name; public TextView lvw_custom_description; public TextView received; public TextView pm_id; } }

然后在onCreate中使用连接适配器ListView视图对象和数组数据

ListView listView;
MyAdapter adapter;
private List<Map<String, Object>> data1 = new ArrayList<Map<String, Object>>();
listView = (ListView)findViewById(R.id.list_view);
adapter = new MyAdapter(PMListActivity.this,data1);
listView.setAdapter(adapter);

然后与后端交互代码

public void onFooterRefresh(PullToRefreshView view) {  //上拉加载更多
	mPullToRefreshView.postDelayed(new Runnable() {
		
		@Override
		public void run() {
			if(lastpg > offset){
				getPMList();// 加载更多数据
			}else{
				Toast.makeText(PMListActivity.this, "已是最后一页!!"
						, Toast.LENGTH_SHORT).show();
			}
			mPullToRefreshView.onFooterRefreshComplete();
		}
	}, 1000);
}
public void onHeaderRefresh(PullToRefreshView view) {  //下拉刷新
	mPullToRefreshView.postDelayed(new Runnable() {
		
		@Override
		public void run() {
			data1.clear();
			offset = 1;
			getPMList();// 加载更多数据
			//设置更新时间
			SimpleDateFormat sDateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");     
			String date = sDateFormat.format(new Date());  
			mPullToRefreshView.onHeaderRefreshComplete("最近更新:"+date);
			//mPullToRefreshView.onHeaderRefreshComplete();
		}
	},1000);
}

Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {  //处理登陆结果
        super.handleMessage(msg);
        Bundle data = msg.getData();
        String Result = data.getString("Result"); //获取结果
        Log.i("mylog","请求结果-->" + Result);
        JSONObject jsonObject;
		try {// 解析后端传回的JSON数据
			jsonObject = new JSONObject(Result);              
            JSONArray entry_list = jsonObject.getJSONArray("entry_list");
            lastpg = jsonObject.getInt("lastpg");
			for (int i = 0; i < entry_list.length(); i++) {  
	             JSONObject result = entry_list.getJSONObject(i);
	             Log.i("listlog",result.getString("id")); 
	             String name_value_list = result.getString("name_value_list");
	             jsonObject = new JSONObject(name_value_list);
	             JSONObject message = jsonObject.getJSONObject("message");
	             JSONObject sender = jsonObject.getJSONObject("sender");
	             JSONObject received = jsonObject.getJSONObject("received");
	             HashMap<String, Object> map = new HashMap<String, Object>();
	             map.put("lvw_custom_name", sender.getString("value"));
	             map.put("lvw_custom_description", message.getString("value"));
	             map.put("received", received.getString("value"));
	             map.put("pm_id", result.getString("id"));
	             data1.add(map); //追加到数组data1
	        }  
			offset++;//页码自增
			adapter.notifyDataSetChanged();//改变adapter  
			
//				SimpleAdapter adapter = new SimpleAdapter(PMListActivity.this, data1, R.layout.lvw_custom, 
//			                new String[] {"lvw_custom_name","lvw_custom_description"}, 
//			                new int[] { R.id.lvw_custom_name, R.id.lvw_custom_description});
//				//位ListView设置Adapter
//				listView.setAdapter(adapter);
		} catch (JSONException e) {
			e.printStackTrace();
		}
   }
};

/*
 * 获取消息列表
 */
public void getPMList() {
	Runnable getPMListThread = new Runnable(){
	    @Override
	    public void run() {
	    	Map<String, String> params = new HashMap<String, String>();
	        String rest_data="{\"session\":\"" + CurrentUserId + "\"," +
	        				  "\"module_name\":\""+module_name+"\"," +
	        				  "\"query\":\""+searchtext+"\"," +
	        				  "\"offset\":" + offset + "," +
	        				  "\"max_results\":" + RowsPerPageInListViews + "," +
	        				  "\"sel\":\"1\"}";
	        System.out.println("map->json:" + rest_data);
            params.put("rest_data", rest_data);
            params.put("method","get_entry_list");
            params.put("fromJava","1");
            String loginResult = HttpUtils.sendPostResquest(rest_url, params, "utf-8");//向后端发送请求
            Log.v("url response", "true="+loginResult);
            Message msg = new Message();
            Bundle data = new Bundle();
            data.putString("Result",loginResult);
            msg.setData(data);
            handler.sendMessage(msg);
	    }
	};
	new Thread(getPMListThread).start();
}

/*
 * 读取消息
 */
public void receivePM(final String id) {
	Runnable receivePMThread = new Runnable(){
	    @Override
	    public void run() {
	    	Map<String, String> params = new HashMap<String, String>();
	        String rest_data="{\"session\":\"" + CurrentUserId + "\"," +
	        				  "\"module_name\":\""+module_name+"\"," +
	        				  "\"record\":\""+id+"\"}";
	        System.out.println("map->json:" + rest_data);
            params.put("rest_data", rest_data);
            params.put("method","receivePM");
            params.put("fromJava","1");
            String loginResult = HttpUtils.sendPostResquest(rest_url, params, "utf-8");
            Log.v("url response", "true="+loginResult);
	    }
	};
	new Thread(receivePMThread).start();
}

最后在onCreate中给listView添加点击事件

//添加点击事件 
listView.setOnItemClickListener(new OnItemClickListener(){
    @Override
    public void onItemClick(AdapterView<?> arg0, View convertView, int position,
            long arg3) {
    	HashMap<String, Object> map = new HashMap<String, Object>();  
    	ViewHolder holder =(ViewHolder)convertView.getTag();
    	Log.w("onItemClick_received: ", holder.received.getText().toString());
		if(holder.received.getText().equals("0")){
			map.put("lvw_custom_name", data1.get(position).get("lvw_custom_name"));
            map.put("lvw_custom_description", data1.get(position).get("lvw_custom_description"));
            map.put("received", "1");
            map.put("pm_id", data1.get(position).get("pm_id"));
            data1.remove(position);//移除选中项  
			data1.add(position,map);//在选中位置添加新项  
            adapter.notifyDataSetChanged();//改变adapter 
            receivePM(holder.pm_id.getText().toString()); //提交到后端改变数据
        }  
    }
});
posted @ 2013-10-31 22:44  无心花  阅读(810)  评论(0编辑  收藏  举报