在我的自定义 ListView 中,我想在单击图像时更改图像。 但目前,当我单击图像时,最后一行图像发生变化,而不是我单击的图像。 我的自定义适配器类如下:
package com.zek.androidvoicechanger;
import java.util.List;
import org.w3c.dom.Text;
import android.app.Activity;
import android.content.Context;
import android.media.Image;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
public class CustomAdapter extends ArrayAdapter<Items> {
Context context;
ImageView image ;
// int[] Radio = { R.drawable.play, R.drawable.pause };
public CustomAdapter(Context context, int resourceId, List<Items> items) {
super(context, resourceId, items);
this.context = context;
}
private class ViewHolder {
// ImageView imageView;
TextView txtTitle;
// ImageView img;
}
public View getView(final int position, View convertView,
final ViewGroup parent) {
ViewHolder holder = null;
Items rowItem = getItem(position);
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.custom_list, null);
holder = new ViewHolder();
holder.txtTitle = (TextView) convertView
.findViewById(R.id.textView1);
// holder.img = (ImageView) convertView.findViewById(R.id.imageView2);
image = (ImageView) convertView.findViewById(R.id.imageView2);
// holder.rdo = (RadioButton) convertView.findViewById(R.id.radioButton1);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
holder.txtTitle.setText(rowItem.getTitle());
image.setImageResource(rowItem.getImageId());
image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "image clicked", 1000).show();
if(position==0){
image.setImageResource(R.drawable.pause);
}
AudioListner.playRecord(position);
}
});
//holder.rdo.setTag(position);
// holder.rdo.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//
// @Override
// public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//
//
//
// }
// });
// rdo.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View v) {
//
//
// if(position==0){
// rdo.indexOfChild(findViewById(isEnabled(position)));
// Toast.makeText(context, "image clicked", 1000).show();
// rdo.setBackgroundResource(R.drawable.pause);
// AudioListner.playRecord(position);
//
// }
//
//
//
// if (rdo.isClickable()) {
// rdo.setBackgroundResource(R.drawable.pause);
// Toast.makeText(context, "image clicked", 1000).show();
//
// //Radio[1] = 1;
// AudioListner.playRecord(position);
//
// } else {
// // rdo.setBackgroundResource(R.drawable.play);
// Toast.makeText(context, "image not clicked", 1000).show();
//
// }
////
// }
// });
return convertView;
}
}
任何帮助将不胜感激。
最佳答案
基于适配器的 View (例如ListView
)会回收其 View 以节省资源。在滚动期间,ListView 将回收不再可见的 View 。 Lucas 的这篇文章是了解更多有关其工作原理的好地方:http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/
因此,在 getView()
方法中注册 onClick 可能不是一个好主意。而是使用 setOnItemClickListener() ListView 上的方法。
要完成您想要做的事情,您可以这样做:
编辑:根据您的评论更新了我的代码。
mYourListView..setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick (AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(context, "Item #" + position + " clicked", Toast.LENGTH_SHORT).show();
// here, "position" is the position of your item and "id" is your
// item's id in your data set.
// mLastClickedPosition is a member field of type long which
// stores the position of the most recently clicked item,
// initially set to -1
if(mLastClickedPosition != -1){
// do something to pause the item in your list at this position
}
// next, update mLastClickedPosition
mLastClickedPosition = position
// find the image in your view and update it
if(position==0){
ImageView imageView = view.findViewById(R.id.your_image);
imageView.setImageResource(R.drawable.pause);
}
// play audio
AudioListner.playRecord(position);
}
});
关于java - 在自定义 ListView Android 中点击更改图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22909073/