简体   繁体   English

Android在ListView中更改imageView资源onItemClick

[英]Android change imageView resource onItemClick in Listview

I got LIstView with 3 TextViews and 1 ImageView -using simpleAdapter with specific xml Layout 我有3个TextViews和1个ImageView的LIstView-使用带有特定xml布局的simpleAdapter

layout: 布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tvSongName"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:background="@drawable/plank1"
        android:gravity="center"
        android:text="TextView"
        android:textSize="14sp"
        android:textStyle="bold" />

    <ImageView 

        android:id="@+id/ivFav"
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="10dp"
        android:src="@drawable/plank4_empty" />

    <TextView
        android:id="@+id/tvDate"
        android:layout_width="170dp"
        android:layout_height="50dp"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/tvSongName"
        android:background="@drawable/plank2"
        android:gravity="center"
        android:text="TextView"
        android:textSize="14sp"
        android:textStyle="bold" />

    <TextView android:layout_centerVertical="true"
        android:id="@+id/tvArtist"
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/ivFav"
        android:background="@drawable/plank3"
        android:gravity="center"
        android:text="TextView"
        android:textSize="14sp"
        android:textStyle="bold" />

</RelativeLayout>

code: 码:

// get all the JSON Objects of today songs and return in array
    public JSONArray getJSONs_array() throws ClientProtocolException, IOException, JSONException {
        StringBuilder url = new StringBuilder(current_url);
        HttpGet get = new HttpGet(url.toString());
        HttpResponse r = client.execute(get);
        int status = r.getStatusLine().getStatusCode();
        if (status == 200) {
            HttpEntity e = r.getEntity();
            String data = EntityUtils.toString(e);
            JSONArray JSONarray = new JSONArray(data);
            return JSONarray;
        } else {
            return null;
        }

    }

    public class Read_today_songs extends AsyncTask<String, Integer, String> {

        boolean running = true;

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            pbPlaylist.setVisibility(View.VISIBLE);
        }

        @Override
        protected String doInBackground(String... params) {
            try {
                jsonArray = getJSONs_array();
                if (jsonArray.length() > 0) {
                    today_song_item = new ArrayList<Map<String, String>>();
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        // singerName = jsonObject.getString("singerName");
                        Map<String, String> map = new HashMap<String, String>();
                        map.put("singerName", jsonObject.getString("singerName"));
                        map.put("songName", jsonObject.getString("songName"));
                        map.put("date", jsonObject.getString("date"));
                        today_song_item.add(map);
                    }
                    return "true";
                } else
                    return "false";
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return null;
            }
        }

        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            // PrograssBar Disapper
            pbPlaylist.setVisibility(View.GONE);
            // check if got the today_song_itemArrayList<Map<String, String>>()
            // with values
            if (result.contains("true")) {
                adapter = new SimpleAdapter(thePlayList.this, today_song_item, R.layout.playlist_item_layout, new String[] { "singerName", "songName", "date" }, new int[] { R.id.tvArtist, R.id.tvSongName, R.id.tvDate });
                lvSongsList.setAdapter(adapter);
            } else
                fb_msg = "שגיאה התרחשה!";
        }
    }

on item click methods: 关于项目单击方法:

lvSongsList.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // TODO Auto-generated method stub

                change_selected_song_to_fav_or_not(view);

                // TextView TextView_SongArtistFromView =
                String SongArtistFromView = ((TextView) view.findViewById(R.id.tvArtist)).getText().toString();
                String SongNameFromView = ((TextView) view.findViewById(R.id.tvSongName)).getText().toString();

                // Will hold the HashMap of vlaues
                HashMap<String, String> queryValuesMap = new HashMap<String, String>();
                queryValuesMap.put("singerName", SongArtistFromView);
                queryValuesMap.put("songName", SongNameFromView);

                // Call for function that adding the new HashMap to the db
                // insert the song to favs -> 1=true    -1=false
                long inserted = dbTools.insertNewFav(queryValuesMap);
                if (inserted >= 1) {
                    Toast.makeText(thePlayList.this, "שיר נוסף למועדפים!", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(thePlayList.this, "שגיאה לא מוכרת בהוספת שיר! יש לנסות שוב מאוחר יותר!", Toast.LENGTH_SHORT).show();
                }

                // DELETE ALL ROWS --------------> delete line when all is done
//              dbTools.deleteAllRows();

            }
        });

when I click the item it does change the image to the wanted one, but its changing every 5th item image too! 当我单击该项目时,它的确将图像更改为所需图像,但是它也会每更改第5个项目图像一次!

how can I fix it ? 我该如何解决?

(found some outer topics that speaking about it, but I'm using the simple adapter) (找到了一些有关它的外部主题,但是我正在使用简单的适配器)

You just use this custom adapter in your Listview creation and then you will write your code in this block... 您只需在创建Listview时使用此自定义适配器,然后在此块中编写代码即可。

use this code in your activity... 在您的活动中使用此代码...

CustomAdapter mAdapter = new CustomAdapter(this, R.layout.listitem, mListItems);
mPullRefreshListView.setAdapter(mAdapter);

And then here you replace your Layout.... 然后在这里替换布局。

public class CustomAdapter extends ArrayAdapter<Sample> {

public ArrayList<Sample> mlist;
public Context context;
public LayoutInflater inflater;

public CustomAdapter(Context context, int resource, ArrayList<Sample> mlist) {
    super(context, resource);
    this.mlist = mlist;
    this.context = context;
    inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getPosition(Sample item) {
    return super.getPosition(item);
}

@Override
public Sample 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.listitem, null);//Replace your layout....
    TextView text1 = (TextView) convertView.findViewById(R.id.item1);
    TextView text2 = (TextView) convertView.findViewById(R.id.item2);
    text1.setText(mlist.get(position).getListitem1());
    text2.setText(mlist.get(position).getListitem2());
    text2.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // you just put your Logic here And use this custom adapter to
            // load your Data By using this particular custom adapter to
            // your listview
                            //Change your imageview here

        }
    });
    return convertView;
}

 }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM