1

我一直在寻找年龄并尝试了几个月。我永远不能让我的观点(任何观点)无效。这里有什么问题,谁能告诉我?谁能告诉我如何使用这些无效方法。提前致谢!

                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();
4

2 回答 2

1

调用notifyDataSetChanged不工作的原因,是因为数据集没有改变。

在您的内部Handler,您可以更改ListView自身的布局。ListView不超过 的表示,Adapter它保存数据。

为了理解它是如何工作的,这篇文章将解释它。

将其应用于您的代码将输出如下内容:(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 
   }
}
于 2012-12-07T11:49:19.383 回答
0

嘿检查你的 Handler run() 你在哪里再次创建 ListView 而不是设置适配器。您可能正在通知适配器,但在创建另一个对象时该适配器未设置为 Listview。我不知道您的 getAllInvoices() 会做什么,但我确信您没有将适配器设置为 listview,因此它永远不会收到通知。根据您的代码,即使在 getAllInvoices() 中也无法设置适配器,因为 listview 是局部变量。

于 2012-12-07T11:38:37.313 回答