我尝试在ListView中创建一个图像更改点击,它确实更改,但当我向下滚动而不是备份图像更改为默认图像。我的CustomAdapter:
public class CustomAdapter extends ArrayAdapter<Song> {
public ArrayList<Song> mlist;
public ArrayList<Song> original_mlist;
public Context context;
public LayoutInflater inflater;
ImageView ivFav;
TextView tvArtist;
TextView tvSongName;
TextView tvDate;
DBTools dbTools;
String tvDate_from_list;
String tvArtist_from_list;
String tvSongName_from_list;
String backgroundImageName;
ImageView ivFavInside;
String ImageTagText="";
public CustomAdapter(Context context, int resource, ArrayList<Song> mlist) {
super(context, resource);
dbTools = new DBTools(context);
this.mlist = mlist;
this.context = context;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getPosition(Song item) {
return super.getPosition(item);
}
@Override
public Song getItem(int position) {
return mlist.get(position);
}
@Override
public int getCount() {
return mlist.size();
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.playlist_item_layout, null);
tvArtist = (TextView) convertView.findViewById(R.id.tvArtist);
tvSongName = (TextView) convertView.findViewById(R.id.tvSongName);
tvDate = (TextView) convertView.findViewById(R.id.tvDate);
ivFav = (ImageView) convertView.findViewById(R.id.ivFav);
tvArtist_from_list = mlist.get(position).getSingerName();
tvSongName_from_list = mlist.get(position).getSongName();
tvDate_from_list = mlist.get(position).getDate();
tvArtist_from_list = tvArtist_from_list.replaceAll("(\\r|\\n|' ')", "");
tvSongName_from_list = tvSongName_from_list.replaceAll("(\\r|\\n|' ')", "");
tvDate_from_list = tvDate_from_list.replaceAll("(\\r|\\n|' ')", "");
tvArtist.setText(tvArtist_from_list);
tvSongName.setText(tvSongName_from_list);
tvDate.setText(tvDate_from_list);
try {
Cursor c = dbTools.getAllRowsByQuery("SELECT * FROM favs WHERE singerName='" + tvArtist_from_list + "' AND songName='" + tvSongName_from_list + "'");
if (c.moveToFirst()) {
ivFav.setImageResource(R.drawable.plank4);
ivFav.setTag("full");
} else {
ivFav.setImageResource(R.drawable.plank4_empty);
ivFav.setTag("");
}
} catch (Exception e) {
alert(e.toString());
}
ivFav.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// ------------------------------------
// Heart Icon(only) - Show / Hide
// ------------------------------------
ivFavInside = (ImageView)v.findViewById(R.id.ivFav);
String backgroundImageName = ivFavInside.getTag().toString();
if (backgroundImageName == null || backgroundImageName == "") {
ivFavInside.setImageResource(R.drawable.plank4);
ivFavInside.setTag("full");
} else {
ivFavInside.setImageResource(R.drawable.plank4_empty);
ivFavInside.setTag("");
}
}
});
return convertView;
}
}
尝试了这个(在GetView上 - 在我设置我的ivFav之后):
ImageTagText = ivFav.getTag().toString();
if (ImageTagText != null || ImageTagText != "") {
ivFav.setImageResource(R.drawable.plank4);
}
但它正在巡航 - 出现此错误消息:
03-28 00:14:39.450: E/AndroidRuntime(11363): FATAL EXCEPTION: main
03-28 00:14:39.450: E/AndroidRuntime(11363): java.lang.NullPointerException
03-28 00:14:39.450: E/AndroidRuntime(11363): at com.manishma.CustomAdapter.getView(CustomAdapter.java:92)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.widget.AbsListView.obtainView(AbsListView.java:2210)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.widget.ListView.makeAndAddView(ListView.java:1831)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.widget.ListView.fillDown(ListView.java:674)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.widget.ListView.fillFromTop(ListView.java:735)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.widget.ListView.layoutChildren(ListView.java:1652)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.widget.AbsListView.onLayout(AbsListView.java:2045)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.View.layout(View.java:14255)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.ViewGroup.layout(ViewGroup.java:4413)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1670)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1528)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.widget.LinearLayout.onLayout(LinearLayout.java:1441)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.View.layout(View.java:14255)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.ViewGroup.layout(ViewGroup.java:4413)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.widget.FrameLayout.onLayout(FrameLayout.java:446)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.View.layout(View.java:14255)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.ViewGroup.layout(ViewGroup.java:4413)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1670)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1528)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.widget.LinearLayout.onLayout(LinearLayout.java:1441)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.View.layout(View.java:14255)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.ViewGroup.layout(ViewGroup.java:4413)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.widget.FrameLayout.onLayout(FrameLayout.java:446)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.View.layout(View.java:14255)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.ViewGroup.layout(ViewGroup.java:4413)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1998)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1812)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1050)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4560)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.Choreographer.doCallbacks(Choreographer.java:562)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.Choreographer.doFrame(Choreographer.java:532)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.os.Handler.handleCallback(Handler.java:725)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.os.Handler.dispatchMessage(Handler.java:92)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.os.Looper.loop(Looper.java:137)
03-28 00:14:39.450: E/AndroidRuntime(11363): at android.app.ActivityThread.main(ActivityThread.java:5171)
03-28 00:14:39.450: E/AndroidRuntime(11363): at java.lang.reflect.Method.invokeNative(Native Method)
03-28 00:14:39.450: E/AndroidRuntime(11363): at java.lang.reflect.Method.invoke(Method.java:511)
03-28 00:14:39.450: E/AndroidRuntime(11363): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
03-28 00:14:39.450: E/AndroidRuntime(11363): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:564)
03-28 00:14:39.450: E/AndroidRuntime(11363): at dalvik.system.NativeStart.main(Native Method)
我怎样才能让它留在改变的图像上?