带有条件的ListView显示空行

时间:2014-02-10 19:39:19

标签: android listview conditional-statements invisible

我在显示ListView个项目时出现问题。当我删除我的条件时,所有内容都显示正确,但是当我重新设置条件以使用户看不见时,我的listview最终会有空位/线,我不知道如何修复它。怎么了?条件是否正确?

@Override                                                                                   
public View getView(int position, View convertView, ViewGroup parent) {
    ApplicationInfo entry = aListAppInfo.get(position);
    View v = convertView;                                                                   
    // convertView
    // recyklovace
    if(v == null ){ 
        LayoutInflater inflater = LayoutInflater.from(aContext);
        v = inflater.inflate(R.layout.layout_appinfo, null);
    }else{} 
    //nahrat layout
    ImageView ivAppIcon = (ImageView)v.findViewById(R.id.ivIcon);
    TextView tvAppName = (TextView)v.findViewById(R.id.tvName);
    TextView tvPkgName = (TextView)v.findViewById(R.id.tvPack);
    chAppStat = (ToggleButton)v.findViewById(R.id.switch1);
    chAppStat.setTag(entry.packageName);
    chAppStat.setOnCheckedChangeListener(aListener);                                                                        
    if (aListAppInfo.get(position).packageName == aListAppInfo.get(position).loadLabel (aPackManager )
                    ||((entry.packageName.equals("android")) 
                    || (entry.packageName.equals("com.android.systemui"))
                    || (entry.packageName.equals("com.android.dreams.basic"))
                    || (entry.packageName.equals("com.android.certinstaller"))
                    || (entry.packageName.equals("com.android.defcontainer"))
                    || (entry.packageName.equals("com.android.htmlviewer"))
                    || (entry.packageName.equals("com.android.keychain"))
                    || (entry.packageName.equals("com.android.location.fused"))
                    || (entry.packageName.equals("com.android.providers.applications"))
                    || (entry.packageName.equals("com.android.providers.userdictionary")))){
        chAppStat.setVisibility(View.INVISIBLE);        
    }else{  
        chAppStat.setVisibility(View.VISIBLE);
    }
    ivAppIcon.setImageDrawable(entry.loadIcon(aPackManager));
    tvPkgName.setText(entry.packageName);
    tvAppName.setText(entry.loadLabel(aPackManager));
    return v;
// navrat view
}

3 个答案:

答案 0 :(得分:0)

当条件成立时你得到空格?你想删除那个空间?如果是,请使用View.GONE代替View.INVISIBLE

View.INVISIBLE使当前视图对用户不可见,但不删除由其分配的空间。这样就显示了两个ListView项之间的空格。

View.GONE不仅使视图不可见,而且还删除了该空间,以便其他人可以使用它。因此,两个ListView项之间不会有差距。

chAppStat.setVisibility(View.INVISIBLE);更改为chAppStat.setVisibility(View.GONE);

答案 1 :(得分:0)

一些事情:

  • 您将convertView分配给v。不要这样做,没有必要,只需直接使用convertView

  • 使用原生ArrayAdapter的{​​{1}}代替。这将管理您通过getItem(position)的{​​{1}}并从中获取项目,因此无需使用自己的结构化。

  • 使用List代替ArrayAdapter。这将使布局完全消失,而不是在它可见时留下适合的空间。

答案 2 :(得分:0)

这里有两个注释。

首先,查看Android文档,了解View.INVISIBLE的实际含义。正如其他人已经提到的,View.GONE会更适合你的情况。

其次,我根本不会试图隐藏这样的细胞。过滤列表应该是首选方式。在适配器中使用列表之前过滤列表,或者在自定义适配器上使用过滤。可以找到一个示例here,但这种技术更适用于列表的运行时过滤,就像用户可以使用查询过滤列表一样。