Android 如何在ListView中删除某些单元格
我在BaseAdapter中使用上述代码来显示列表视图。Android 如何在ListView中删除某些单元格,android,listview,baseadapter,Android,Listview,Baseadapter,我在BaseAdapter中使用上述代码来显示列表视图。 lvt是一种应用程序全局数据。 如果show为真,我想将单元格消失。 但不删除数据。 但我的方法不会显示数据,而是显示分隔线。 我怎么做 你不能做你要求的事。 如果BaseAdater.count()返回所有ITME的计数(即使是您不想显示的ITME),那么您就不能告诉getView()方法“忽略”某些逻辑项 我建议您做的是过滤您的数据列表(创建一个新的lvt),使其仅包含您希望listView显示的项目,并且只有这样,适配器才能使用这个
lvt是一种应用程序全局数据。
如果show为真,我想将单元格消失。
但不删除数据。
但我的方法不会显示数据,而是显示分隔线。
我怎么做 你不能做你要求的事。
如果BaseAdater.count()返回所有ITME的计数(即使是您不想显示的ITME),那么您就不能告诉getView()方法“忽略”某些逻辑项 我建议您做的是过滤您的数据列表(创建一个新的lvt),使其仅包含您希望listView显示的项目,并且只有这样,适配器才能使用这个新的逻辑数据
在您的情况下,正如您所怀疑的,“lvt.getShowAt(position)=false”应该是您的筛选指示符如果您想从列表视图中隐藏项目,我希望您使用单独的
lvt
(仅显示true),而不是试图操纵视图。我修改getCount如下:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewTag viewTag;
if(convertView == null) {
convertView = myInflater.inflate(R.layout.row_item, null);
viewTag = new ViewTag((LinearLayout)convertView.findViewById(R.id.row), (TextView)convertView.findViewById(R.id.tv));
convertView.setTag(viewTag);
}
else {
viewTag = (ViewTag) convertView.getTag();
}
viewTag.tv.setText(lvt.getTextAt(position));
viewTag.tv.setVisibility(View.VISIBLE);
boolean show = lvt.getShowAt(position);
if(show) {
viewTag.tv.setVisibility(View.GONE);
viewTag.ll.setVisibility(View.GONE);
}
else {
viewTag.ll.setVisibility(View.VISIBLE);
}
return convertView;
}
@Override
public int getCount() {
int count = 0;
int i;
for(i = 0; i < lvt.sizeTestArray(); i++) {
if(!lvt.getfiv1At(i)) {
count++;
}
}
return count;
}
@覆盖
public int getCount(){
整数计数=0;
int i;
对于(i=0;i
并在getView中更改位置,如下所示:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewTag viewTag;
if(convertView == null) {
convertView = myInflater.inflate(R.layout.row_item, null);
viewTag = new ViewTag((LinearLayout)convertView.findViewById(R.id.row), (TextView)convertView.findViewById(R.id.tv));
convertView.setTag(viewTag);
}
else {
viewTag = (ViewTag) convertView.getTag();
}
viewTag.tv.setText(lvt.getTextAt(position));
viewTag.tv.setVisibility(View.VISIBLE);
boolean show = lvt.getShowAt(position);
if(show) {
viewTag.tv.setVisibility(View.GONE);
viewTag.ll.setVisibility(View.GONE);
}
else {
viewTag.ll.setVisibility(View.VISIBLE);
}
return convertView;
}
@Override
public int getCount() {
int count = 0;
int i;
for(i = 0; i < lvt.sizeTestArray(); i++) {
if(!lvt.getfiv1At(i)) {
count++;
}
}
return count;
}
inti;
整数计数=0;
对于(i=0;i
现在似乎做得不错。但我不确定现在是否存在任何错误。但此方法可能导致“Adapter.notifyDataSetChanged();”没用。@brian:您不需要调用listView.setAdapter()两次。只有在创建了新的filterd listI之后才调用它,这意味着如果原始数据发生更改,新数据将不会自动更新update@brian:但在相关活动上-您不希望显示原始数据,而只显示filterd数据。你的adaper需要处理这个新的filterd数据。我不太明白这到底有什么问题?@布莱恩:我想我已经抓住你了。如果由于某种原因,原始数据发生了更改,则必须在之后更新过滤器列表。。无法逃避。。。如果它太复杂以至于不能用这种方式工作,那么也许你应该考虑重构你的数据结构(LVT),使其更适合于这种状态。