Привет, друзья, у меня есть одно пользовательское представление списка, в котором я создал два xml, один для отображения списка, а второй - для каждой строки в списке.
все в порядке с моим кодом и пользовательским интерфейсом, но моя проблема заключается в том, что давайте возьмем пример, когда я показываю 8 строк в представлении списка и нажимаю кнопку/компонент в первой строке, а затем автоматически вызывается 5-й, что означает, что событие onClick применяется как к 1-му, так и к 5-му компоненты строки я не знаю, как решить эту проблему, я знаю, что это глупая ошибка, не могли бы вы помочь мне, спасибо заранее
вот код customAdapter
public CustomAdapter(Activity a, ArrayList<?> d) {
/********** Take passed values **********/
activity = a;
data = d;
/*********** Layout inflator to call external xml layout () **********************/
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
/******** What is the size of Passed Arraylist Size ************/
public int getCount() {
if (data.size() <= 0)
return 1;
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
@Override
public int getViewTypeCount() {
if (getCount() != 0)
return getCount();
return 1;
}
/********* Create a holder to contain inflated xml file elements ***********/
public static class ViewHolder {
public Button btnLike;
public Button btnVoiceComment;
public Button btnShare;
public ImageButton ibMore;
public ImageButton ibPlayAudio;
public ImageView ivPostImage;
public ProgressWheel pw_two;
public TextView tvLocation, tvListens, tvMessage;
}
/*********** Depends upon data size called for each row , Create each ListView row ***********/
public View getView(final int position, View convertView, ViewGroup parent) {
View vi = convertView;
final ViewHolder holder;
if (convertView == null) {
/********** Inflate tabitem.xml file for each row ( Defined below ) ************/
vi = inflater.inflate(R.layout.list_row_new, null);
holder = new ViewHolder();
/******** View Holder Object to contain tabitem.xml file elements ************/
holder.btnLike = (Button) vi.findViewById(R.id.list_row_btn_like);
holder.btnVoiceComment = (Button) vi
.findViewById(R.id.list_row_btn_voicecomment);
holder.ibMore = (ImageButton) vi
.findViewById(R.id.list_row_imgbtn_more);
holder.btnShare = (Button) vi
.findViewById(R.id.list_row_imgbtn_share);
holder.ivPostImage = (ImageView) vi
.findViewById(R.id.list_row_iv_post);
holder.ibPlayAudio = (ImageButton) vi
.findViewById(R.id.list_row_ib_play);
holder.tvMessage = (TextView) vi.findViewById(R.id.list_row_tv_msg);
holder.tvListens = (TextView) vi
.findViewById(R.id.list_row_tv_listencount);
holder.tvLocation = (TextView) vi
.findViewById(R.id.list_row_tv_city);
holder.pw_two = (ProgressWheel) vi
.findViewById(R.id.progressBarTwo);
/************ Set holder with LayoutInflater ************/
vi.setTag(holder);
} else
holder = (ViewHolder) vi.getTag();
if (data.size() <= 0) {
holder.tvListens.setText("No Data");
} else {
// ///////
tempValues = null;
tempValues = (ListModel) data.get(position);
// Toast.makeText(activity, "in else", 100).show();
/***** Get each Model object from Arraylist ********/
/************ Set Model values in Holder elements ***********/
holder.btnLike.setText(tempValues.getlikeCounter());
holder.btnVoiceComment.setText(tempValues.getvoiceCommentCounter());
holder.btnShare.setText(tempValues.getShareCounter());
/******** sSet Item Click Listner for LayoutInflater for each row ***********/
vi.setOnClickListener(new OnItemClickListener(position));
holder.btnLike.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(activity, "like clicked", 100).show();
View view = (Button) v;
((Button) view).setText(Integer.parseInt(((Button) view)
.getText().toString()) + 1 + "");
}
});
holder.btnVoiceComment.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//
// Drawable d = holder.rlBg.getBackground();
// Bitmap bitmap = drawableToBitmap(d);
// ByteArrayOutputStream baos = new ByteArrayOutputStream();
// bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
// byte[] b = baos.toByteArray();
}
});
holder.ibMore.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(activity, "more clicked", 100).show();
PopupMenu popup = new PopupMenu(activity, v);
/** Adding menu items to the popumenu */
popup.getMenuInflater().inflate(R.menu.main,
popup.getMenu());
popup.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.spam:
Toast.makeText(activity, "Spam clicked",
Toast.LENGTH_SHORT).show();
break;
case R.id.blockuser:
Toast.makeText(activity, " Block user clicked",
Toast.LENGTH_SHORT).show();
break;
case R.id.remove:
Toast.makeText(activity, "Remove clicked",
Toast.LENGTH_SHORT).show();
// RecentFragment rf = new RecentFragment();
// rf.onItemClick(position);
break;
default:
break;
}
return false;
}
});
popup.show();
}
});
holder.btnShare.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(activity, "share clicked", 100).show();
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(android.content.Intent.EXTRA_TEXT,
"This message is shared by Nookster application.You clicked on item = "
+ position);
activity.startActivity(intent);
}
});
holder.ibPlayAudio.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (isTimerRunning) {// stop button is on
timer.cancel();
holder.ibPlayAudio
.setImageResource(R.drawable.playpost);
holder.pw_two.setVisibility(View.GONE);
isTimerRunning = false;
} else {
timer = new CounterClass(10000, TIME_INTERVAL, holder);
timer.start();
// play button is on
holder.ibPlayAudio
.setImageResource(R.drawable.stoppost);
holder.pw_two.setVisibility(View.VISIBLE);
isTimerRunning = true;
}
}
});
// ///////
}
return vi;
}
@Override
public void onClick(View v) {
Log.v("CustomAdapter", "=====Row button clicked");
}