最近學習ListView的用法,需要實現一個帶圖片和文字的ListView,然後在點擊或者選擇到每個Item的時候改變這個Item的圖片。
帶圖片和文字的ListView已經實現出來,但是在實現改變圖片的時候卻不知道怎么實現了,望指教:
package lee.mylistview2;import java.util.ArrayList;
import java.util.HashMap;import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;public class MyListView2 extends Activity {
mySimpleAdapter mAdapter; private ListView listView; private ArrayList<HashMap<String, Object>> users = new ArrayList<HashMap<String, Object>>(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); for (int i = 0; i < 10; i++) { HashMap<String, Object> user = new HashMap<String, Object>(); user.put("img", R.drawable.user); user.put("username", "姓名(" + i + ")"); user.put("age", (20 + i) + ""); users.add(user); } mAdapter = new mySimpleAdapter(this); listView = ((ListView) findViewById(R.id.list)); listView.setAdapter(mAdapter); //listView.setSelection(selectPosition); listView.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { listView.setAdapter(mAdapter); } }); listView.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long arg3) { mAdapter.setVisible(); } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); } class mySimpleAdapter extends BaseAdapter{ private LayoutInflater mInflater; private Bitmap mIcon1, mIcon2; public mySimpleAdapter(Context c){ mInflater = LayoutInflater.from(c); // Icons bound to the rows. mIcon1 = BitmapFactory.decodeResource(c.getResources(), R.drawable.user); mIcon2 = BitmapFactory.decodeResource(c.getResources(), R.drawable.black); } public int getCount(){ return users.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } ViewHolder holder; @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.user, null); // Creates a ViewHolder and store references to the two children views // we want to bind data to. holder = new ViewHolder(); holder.text1 = (TextView) convertView.findViewById(R.id.name); holder.text2 = (TextView) convertView.findViewById(R.id.age); holder.icon = (ImageView) convertView.findViewById(R.id.img); //holder.icon.setVisibility(View.INVISIBLE); convertView.setTag(holder); } else { // Get the ViewHolder back to get fast access to the TextView // and the ImageView. holder = (ViewHolder) convertView.getTag(); } // Bind the data efficiently with the holder. holder.text1.setText(users.get(position).get("username").toString()); holder.text2.setText(users.get(position).get("age").toString()); holder.icon.setImageBitmap(mIcon2); //holder.icon.setVisibility(View.INVISIBLE); return convertView; } public void setVisible(){ holder.icon.setImageBitmap(mIcon1); holder.icon.setVisibility(View.VISIBLE); //notifyDataSetInvalidated(); notifyDataSetChanged(); } } static class ViewHolder { TextView text1, text2; ImageView icon; }
}
現在的效果為:
问题补充
我也試用SimpleAdapter來實現,也是可以做出帶圖片的ListView的界面,但是就是不能實現點擊每個Item時候,改變前面的圖片的功能。。。。
问题补充
給自己頂頂