我一直在寻找年龄并尝试了几个月。我永远不能让我的观点(任何观点)无效。这有什么问题,有人可以告诉我吗?任何人都可以告诉我如何使用这些无效的方法。提前谢谢!
if(result.equals("true"))
{
View row = invoices.getChildAt(info.position);
//TextView bgr = (TextView) row.findViewById(R.id.status);
//bgr.setBackgroundResource(R.color.blue);
//row.setVisibility(View.GONE);
Animation anim = AnimationUtils.loadAnimation(Invoices.this, R.anim.down_to_top);
anim.setDuration(500);
invoices.getChildAt(info.position).startAnimation(anim );
final int row_pos = info.position;
new Handler().postDelayed(new Runnable() {
public void run() {
/*row.getInstance().remove(
FavouritesManager.getInstance().getTripManagerAtIndex(info.position)
);*/
ListView invoices = (ListView) findViewById(R.id.allInvoices);
View row = invoices.getChildAt(row_pos);
row.setVisibility(View.GONE);
getAllInvoices();
myAdapter.notifyDataSetChanged();
}
}, anim.getDuration());
Toast.makeText(getApplicationContext(), "Deleted!", Toast.LENGTH_SHORT).show();
}
更新: 这就是我现在所拥有的。它会正确删除视图和动画,但它仍然无效?
ListView invoices = (ListView) findViewById(R.id.allInvoices);
View row = invoices.getChildAt(row_pos);
HashMap<String, String> lRow = invoice_items.get(row_pos);
lRow.remove(row);
row.setVisibility(View.GONE);
myAdapter.notifyDataSetChanged();
答案 0 :(得分:1)
调用notifyDataSetChanged
无效的原因是因为数据集未更改。
在Handler
内,您可以更改ListView
本身的布局。 ListView
不仅仅是保存数据的Adapter
的表示形式。
要了解它是如何运作的,this post会解释它。
在您的代码上应用它会输出如下内容:(PSUEDO)
Handler {
lRow = mAdapter.get(row_pos);
lRow.setVisibilty(false); // visibility is a flag of the row object
mAdapter = notifyDataSetChanged();
}
内部适配器:
getView() {
if (row.getVisibility){
// do stuff
} else {
// do other stuff
}
}
答案 1 :(得分:0)
嘿检查Handler run(),你再次创建ListView而不是设置适配器。您可能正在通知适配器,但在创建另一个对象时该适配器未设置为Listview。我不知道你的getAllInvoices()会做什么,但我确定你没有设置适配器到listview所以它永远不会得到通知。根据您的代码,即使在getAllInvoices()中也无法设置适配器,因为listview是局部变量。