Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OnClick事件与listview项一起重复_Android_Listview_Baseadapter_Android Viewholder - Fatal编程技术网

Android OnClick事件与listview项一起重复

Android OnClick事件与listview项一起重复,android,listview,baseadapter,android-viewholder,Android,Listview,Baseadapter,Android Viewholder,我的应用程序中有一个列表视图。每个listview行在点击时展开,隐藏视图变为可见,但问题是隐藏视图对于列表中的许多其他项目也变为可见。我知道这种行为的原因,但我不知道如何解决它。这是我的适配器类 public class ScheduleTaskAdapter extends BaseAdapter { Context context; LayoutInflater layoutInflater; // List<InterestAndLanguageBean&

我的应用程序中有一个列表视图。每个listview行在点击时展开,隐藏视图变为可见,但问题是隐藏视图对于列表中的许多其他项目也变为可见。我知道这种行为的原因,但我不知道如何解决它。这是我的适配器类

 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;
    }

}
公共类ScheduleTaskAdapter扩展了BaseAdapter{
语境;
LayoutInflater LayoutInflater;
//List interestAndLanguageBeans=new ArrayList();
List imageList=新建ArrayList();
公共ScheduleTaskAdapter(上下文上下文,列表imagesList){
this.context=上下文;
this.imageList=imagesList;
layoutInflater=(layoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
}
@凌驾
public int getCount(){
返回imageList.size();
}
@凌驾
公共对象getItem(int位置){
返回null;
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
ViewHolder=null;
if(convertView==null){
holder=新的ViewHolder();
convertView=LayoutFlater.充气(R.layout.birds_行,父项,false);
holder.iv_bird=(ImageView)convertView.findViewById(R.id.iv_bird);
holder.frameLayout=(frameLayout)convertView.findViewById(R.id.frame\u);
holder.linearLayout=(linearLayout)convertView.findViewById(R.id.detail_视图);
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\u short\u descript=(TextView)convertView.findViewById(R.id.tv\u short\u 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=(ViewHolder)convertView.getTag();
}
Uri myUri=Uri.parse(birdsurlist.get(position.getUrl());
Glide.with(getActivity()).load(myUri).placeholder(R.drawable.birds).into(holder.iv_birds);
holder.tv_short_descript.setText(birdsurlist.get(position.getdescripp());
holder.tv_long_description.setText(birdsurlist.get(position.getdescripp_larga());
holder.tv_category.setText(birdsurlist.get(position.getNombre_cientifico());
最终视图持有者finalHolder=持有者;
holder.frameLayout.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
finalHolder.linearLayout.setVisibility(View.VISIBLE);
finalHolder.iv_sound.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
试一试{
MediaPlayer mp=新的MediaPlayer();
mp.setDataSource(birdsUrlList.get(position.getUrl_audio());
mp.prepare();
mp.setOnPreparedListener(新的MediaPlayer.OnPreparedListener(){
@凌驾
已准备好公开作废(MediaPlayer mp){
mp.start();
}
});
mp.setOnCompletionListener(新的MediaPlayer.OnCompletionListener(){
@凌驾
完成时的公共作废(MediaPlayer mp){
mp.release();
}
});
//startActivity(新的Intent(Intent.ACTION_视图,Uri.parse(birdsrullist.get(position.getUrl_video()));
}捕获(例外e){
e、 printStackTrace();
}
}
});
finalHolder.iv_video.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
hitBirdSeenService(birdUrlList.get(position.getIdave());
finalHolder.iv_video.setImageResource(R.drawable.eye_选定);
}
});
}
});
holder.imageView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
finalHolder.linearLayout.setVisibility(View.GONE);
}
});
if(birdsUrlList.get(position).getFlag()==1)
{
holder.iv_video.setImageResource(R.drawable.eye_选择);
}否则{
支架.iv_视频.setImageResource(R.drawable.eye110);
}
//毕加索.with(context).load(myUri).placeholder(R.drawable.image).into(holder.pic);
//将(helperTaskBeanList.get(position.getImage())加载到(holder.pic)中;
返回视图;
}
}

ListView项是可重用的。当您滚动列表时,某些项目变为“不可见”,视图项目将被重新用于将变为可见的项目

您不保留展开项和未展开项的数据,因此无法根据getView方法中“展开”零件先前的“展开”状态将其可见性设置为“已展开”或“可见”。简单的解决方法是在展开
put(position,true)
和隐藏
put(position,false)
时,制作一个
Map
并将状态保持在这里。在getView中

boolean state = expandedStateMap.get(position);
finalHolder.linearLayout.setVisibility((state) ? View.VISIBLE : View.GONE);
步骤零(为扩展状态添加映射)

第二步:

 holder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 expandedStateMap.put(position,false);
                finalHolder.linearLayout.setVisibility(View.GONE);
            }
        });
你为什么不去
    //determine if we already expanded the item
    Boolean state = expandedStateMap.get(position);
    if (state == null) {
      state = false;
    }
    finalHolder.linearLayout.setVisibility((state) ? View.VISIBLE :      View.GONE);

    holder.frameLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //save expanded state 
                expandedStateMap.put(position,true);
                finalHolder.linearLayout.setVisibility(View.VISIBLE);
 holder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 expandedStateMap.put(position,false);
                finalHolder.linearLayout.setVisibility(View.GONE);
            }
        });