傢伙我有一個奇怪的問題:onTouchListener添加到所有列表元素,而不是隻有一個
在聊天應用程序,我有一個ListView和一個適配器來對付它。如果用戶從圖庫中發送圖像,我會在泡泡語音上顯示縮略圖,並添加onTouchListener以全屏打開此圖像。問題是:當我添加事件監聽器時,它將添加到所有ImageViews中!所以如果我點擊最後一個imageView,它會在整個屏幕上顯示正確的圖像,但之前的所有其他圖像都顯示相同的圖像。我已經很多次檢查過這些代碼了,我看不到這個問題。有人可以幫忙嗎?
我的適配器:
public class ConversationArrayAdapter extends ArrayAdapter<Message> {
private TextView messageView;
private TextView timeView;
private TextView confView;
private ImageView imageView;
private LinearLayout timeConfView;
private List<Message> messages = new ArrayList<Message>();
private WindowManager wm;
private Display display;
private RelativeLayout.LayoutParams params;
private Context context;
private Message message;
public ConversationArrayAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
this.context = context;
wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
display = wm.getDefaultDisplay();
}
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.list_item_message, parent, false);
}
message = getItem(position);
messageView = (TextView) row.findViewById(R.id.message);
messageView.setText(message.message);
messageView.setBackgroundResource(message.left ? R.drawable.anonymous : R.drawable.me);
timeView = (TextView) row.findViewById(R.id.time);
timeView.setText(message.time);
confView = (TextView) row.findViewById(R.id.confirmation);
confView.setText(message.conf);
timeConfView = (LinearLayout) row.findViewById(R.id.timeConfWrapper);
imageView = (ImageView) row.findViewById(R.id.imageUploaded);
messageView.setMaxWidth(display.getWidth() - (30*display.getWidth()/100));
imageView.setMaxWidth(display.getWidth() - (30*display.getWidth()/100));
imageView.setMaxHeight(display.getHeight() - (70*display.getHeight()/100));
params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
params.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
messageView.setLayoutParams(params);
messageView.setPadding(
(int)(10 * context.getResources().getDisplayMetrics().density),
(int)(5 * context.getResources().getDisplayMetrics().density),
(int)(15 * context.getResources().getDisplayMetrics().density),
(int)(6 * context.getResources().getDisplayMetrics().density));
messageView.requestFocus();
if (!message.image) {
params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.LEFT_OF, R.id.message);
params.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
timeConfView.setLayoutParams(params);
timeConfView.setPadding(0, 0, (int)(10 * context.getResources().getDisplayMetrics().density), 0);
} else {
imageView.setPadding(
(int)(5 * context.getResources().getDisplayMetrics().density),
(int)(5 * context.getResources().getDisplayMetrics().density),
(int)(10 * context.getResources().getDisplayMetrics().density),
(int)(5 * context.getResources().getDisplayMetrics().density));
imageView.requestFocus();
messageView.setVisibility(TextView.INVISIBLE);
imageView.setVisibility(ImageView.VISIBLE);
params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.LEFT_OF, R.id.imageUploaded);
params.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
timeConfView.setLayoutParams(params);
timeConfView.setPadding(0, 0, (int)(10 * context.getResources().getDisplayMetrics().density), 0);
imageView.setImageBitmap(message.bitImage);
imageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Uri imgUri = Uri.parse("file://" + message.imagePath);
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setData(imgUri);
intent.setDataAndType(imgUri, "image/*");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
return true;
}
});
confView.setVisibility(TextView.VISIBLE);
}
return row;
}
@Override
public void add(Message object) {
messages.add(object);
super.add(object);
}
我如何使用它的活動:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Checking the request for gallery and a lot of stuff and generating a bitmap with the filePath
Message msg = new Message(false, message.getText().toString(), DateFormat.getTimeInstance().format(new Date()).substring(0,5), true, bitmap, filePath);
adapter.add(msg);
}
而且我按摩類:
package br.com.unichat.classes;
import android.graphics.Bitmap;
public class Message {
public boolean left;
public boolean image;
public String message;
public String time;
public String conf;
public String imagePath;
public Bitmap bitImage;
public Message(boolean left, String comment, String time) {
super();
this.left = left;
this.message = comment;
this.time = time;
this.conf = "·";
this.image = false;
this.bitImage = null;
}
public Message(boolean left, String comment, String time, boolean image, Bitmap bitImage, String path) {
super();
this.left = left;
this.message = comment;
this.time = time;
this.conf = "·";
this.image = image;
this.bitImage = bitImage;
this.imagePath = path;
}
}
任何想法?在此先感謝
其中是「convertView」聲明? – brainmurphy1
我的不好,我忘了功能標題。編輯。 –