Android:Listview更改图像 - 使用自定义适配器

时间:2014-03-29 16:08:30

标签: java android listview android-listview

我尝试在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)

我怎样才能让它留在改变的图像上?

0 个答案:

没有答案