【发布时间】:2016-06-02 23:26:48
【问题描述】:
我的应用中有一个列表视图。每个列表视图行都在点击时展开,隐藏视图变得可见,但问题是隐藏视图对于列表中的许多其他项目也变得可见。我知道这种行为的原因,但我不知道如何解决它。这是我的适配器类
public class ScheduleTaskAdapter extends BaseAdapter {
Context context;
LayoutInflater layoutInflater;
// List<InterestAndLanguageBean> interestAndLanguageBeans=new ArrayList<>();
List<BirdsDataBean> imageList = new ArrayList<>();
public ScheduleTaskAdapter(Context context, List<BirdsDataBean> imagesList) {
this.context = context;
this.imageList = imagesList;
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return imageList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.birds_row, parent, false);
holder.iv_birds = (ImageView) convertView.findViewById(R.id.iv_bird);
holder.frameLayout = (FrameLayout) convertView.findViewById(R.id.frame_birds);
holder.linearLayout = (LinearLayout) convertView.findViewById(R.id.detail_view);
holder.imageView = (ImageView) convertView.findViewById(R.id.up);
holder.iv_video = (ImageView) convertView.findViewById(R.id.iv_video);
holder.iv_sound = (ImageView) convertView.findViewById(R.id.iv_sound);
holder.tv_short_descript = (TextView) convertView.findViewById(R.id.tv_short_descript);
holder.tv_category = (TextView) convertView.findViewById(R.id.tv_category);
holder.tv_long_description = (TextView) convertView.findViewById(R.id.tv_long_description);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Uri myUri = Uri.parse(birdsUrlList.get(position).getUrl());
Glide.with(getActivity()).load(myUri).placeholder(R.drawable.birds).into(holder.iv_birds);
holder.tv_short_descript.setText(birdsUrlList.get(position).getDescrip());
holder.tv_long_description.setText(birdsUrlList.get(position).getDescrip_larga());
holder.tv_category.setText(birdsUrlList.get(position).getNombre_cientifico());
final ViewHolder finalHolder = holder;
holder.frameLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finalHolder.linearLayout.setVisibility(View.VISIBLE);
finalHolder.iv_sound.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(birdsUrlList.get(position).getUrl_audio());
mp.prepare();
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
//startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(birdsUrlList.get(position).getUrl_video())));
} catch (Exception e) {
e.printStackTrace();
}
}
});
finalHolder.iv_video.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hitBirdSeenService(birdsUrlList.get(position).getIdave());
finalHolder.iv_video.setImageResource(R.drawable.eye_selected);
}
});
}
});
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finalHolder.linearLayout.setVisibility(View.GONE);
}
});
if (birdsUrlList.get(position).getFlag()==1)
{
holder.iv_video.setImageResource(R.drawable.eye_selected);
}else {
holder.iv_video.setImageResource(R.drawable.eye110);
}
//Picasso.with(context).load(myUri).placeholder(R.drawable.image).into(holder.pic);
//malevich.load(helperTaskBeanList.get(position).getImage()).into(holder.pic);
return convertView;
}
}
【问题讨论】:
-
有什么理由不使用 ExpandableListView 吗?
-
查看 getview 方法,它为隐藏视图内的两个按钮提供了单击侦听器方法。我没有找到任何显示展开按钮的可展开列表视图教程
-
将 convertView 和 parent 设置为 final
-
那会怎样?
标签: android listview baseadapter android-viewholder