首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用自定义ListView时的SetVisibility

使用自定义ListView时的SetVisibility
EN

Stack Overflow用户
提问于 2015-10-16 22:11:31
回答 2查看 56关注 0票数 0

我做了一个列表视图。列表视图工作正常。但是视图列表项是一个xml文件。它包含一个imagView和一个层。我希望当用户单击ImagView时,要显示的层。问题是,当用户单击ImagView was Items layers 3和13时,会显示(两次)。我不知道有什么问题?有人来帮忙吗?

custom_item.xml

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ImagView
    android:id="@+id/imagView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#0f0" />


   <LinearLayout
    android:id="@+id/linear"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#00f" />

</LinearLayout>

.java

代码语言:javascript
运行
复制
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    final ViewHolder Holder;

    if (convertView == null) {
        Holder = new ViewHolder();
        convertView = myInflater.inflate(R.layout.cystom_item, null);

        Holder.my_image= (ImageView) convertView.findViewById(R.id.imagView);

        Holder.linear = (LinearLayout) convertView.findViewById(R.id.linear2);

    } else
        Holder = (ViewHolder) convertView.getTag();

    Holder.my_image.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            if (lastView == Holder.linear);
            else {

                if (lastView != null)
                    lastView.setVisibility(View.GONE);

                    Holder.linear.startAnimation(anim);
                    Holder.linear.setVisibility(View.VISIBLE);
                    lastView = Holder.linear;
                }
        }
    });

    return convertView;
}

@Override
public Filter getFilter() {
    // TODO Auto-generated method stub
    return null;
}


public class ViewHolder
{

ImageView my_image;
LinearLayout linear;

}
EN

回答 2

Stack Overflow用户

发布于 2015-10-16 22:14:48

您需要多次连接onClickListener:

代码语言:javascript
运行
复制
Holder.linear1.setOnClickListener(new OnClickListener()...

仅当clickListener是新的支架而不是回收的支架时才设置它。

您应该注意到这里没有大括号:

代码语言:javascript
运行
复制
else
   Holder = (ViewHolder) convertView.getTag();

所以这一行之后的所有东西都在执行。

试试这个:

代码语言:javascript
运行
复制
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder Holder;

if (convertView == null) {
    Holder = new ViewHolder();
    convertView = myInflater.inflate(R.layout.cystom_item, null);

    Holder.my_image= (ImageView) convertView.findViewById(R.id.imagView);

    Holder.linear = (LinearLayout) convertView.findViewById(R.id.linear2);

} else
{
    Holder = (ViewHolder) convertView.getTag();
    Holder.my_image.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {

        if (lastView == Holder.linear);
        else {

            if (lastView != null)
                lastView.setVisibility(View.GONE);

                Holder.linear.startAnimation(anim);
                Holder.linear.setVisibility(View.VISIBLE);
                lastView = Holder.linear;
            }
    }
  });
 }

  return convertView;
 }
票数 0
EN

Stack Overflow用户

发布于 2018-06-24 23:16:01

实际上,我认为您已经在代码中放置了下面的if语句两次,第一次是使用if语句,第二次是在else语句中进行初始化。我认为这导致了列表视图的翻倍。

代码语言:javascript
运行
复制
if (lastView == Holder.linear);

你应该试试这个:

代码语言:javascript
运行
复制
{

                if (lastView != null)
                    lastView.setVisibility(View.GONE);

                else {

                    Holder.linear.startAnimation(anim);
                    Holder.linear.setVisibility(View.VISIBLE);
                    lastView = Holder.linear;
                }
            }

而不是这样:

代码语言:javascript
运行
复制
{

                if (lastView == Holder.linear);
                else {

                    if (lastView != null)
                        lastView.setVisibility(View.GONE);

                    Holder.linear.startAnimation(anim);
                    Holder.linear.setVisibility(View.VISIBLE);
                    lastView = Holder.linear;
                }
            }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33172604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档