大家好朋友我有一个自定义列表视图,其中我创建了两个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");
}
答案 0 :(得分:0)
更改如下:从final ViewHolder holder;
中删除getView()
然后改变这个:
public static class ViewHolder {
public int pos;
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;
void setPosition(int position){
this.pos=position;
}
int getPosition(){
return pos;
}
}
创建 newView 方法,并从(convertView == null)
void newView(int position, View convertView, ViewGroup parent){
vi = inflater.inflate(R.layout.list_row_new, null);
final ViewHolder holder = new ViewHolder();
/******** View Holder Object to contain tabitem.xml file elements ************/
holder.setPosition(position);
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);
}
也要小心改变
if (convertView == null) {
newView(position,convertview,parent);
}
else{
if(holder.getPosition()!=position)
newView(position,convertview,parent);
else
holder = (ViewHolder) vi.getTag();
}
其他一切都保持不变。
让我知道它是否有效。