在recyclerview中使用setVisibility()的正确方法是什么

时间:2016-08-27 10:49:02

标签: android android-recyclerview

我有一个视图,可以单击按钮以获取其他信息。信息最初是隐藏的,并在点击时显示。如果我单击它然后向下滚动,则重用布局。现在,新视图显示隐藏的信息,而不会被重复使用。

如何避免或解决此问题?

编辑:一种方法是我在onBindViewHolder中再次隐藏视图。但是想要一个更好的方法

2 个答案:

答案 0 :(得分:0)

你必须跟踪点击的位置。

$options = array(
      CURLOPT_CONNECTTIMEOUT => 25,//waiting time, in seconds
      CURLOPT_PORT => FTP_PORT,
      CURLOPT_URL =>'FTPES://'.FTP_HOST.'/'.FTP_FILENAME,
      CURLOPT_USERPWD => FTP_USER.':'.FTP_PASS,
      CURLOPT_UPLOAD => 1,
      CURLOPT_INFILE => $fp,
      CURLOPT_INFILESIZE => filesize($meta['uri']),
      CURLOPT_TRANSFERTEXT => true,
      );

答案 1 :(得分:-1)

您遇到此问题的原因是RecyclerView尝试回收视图以防止在用户滚动时创建每个视图,

所以你需要保存当前位置对象的状态,因为你不要在这里推送你的适配器我试着在样本适配器中解释它

@Override
public void onBindViewHolder(final ContactViewHolder contactViewHolder, final int position) {
    SampleObject eachObject = data.get(position);

    if(eachObject.getCurrentState() == SampleObject.CLICKED){
        // hide button
        // show additional information
    }
    else {
        // show button
        // hide additional information view
    }

并在您的ContactViewHolder类中

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.show_data:
                SampleObject eachObject = data.get(position);
                eachObject.setCurrentState(SampleObject.CLICKED);
                break;