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()); //提交到后端改变数据 } } });