我在显示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
}
答案 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,但这种技术更适用于列表的运行时过滤,就像用户可以使用查询过滤列表一样。