1

私は何年にもわたって探し、何ヶ月も試してきました。ビュー (ANY ビュー) を無効にすることはできません。ここで何が問題なのですか、誰か教えてください。そして、これらの無効化メソッドの使用方法を教えてもらえますか。前もって感謝します!

                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

ListView を再度作成し、アダプタを設定していない Handler run() を確認してください。アダプターに通知している可能性がありますが、別のオブジェクトを作成しているため、そのアダプターは Listview に設定されていません。あなたの getAllInvoices() が何をするかはわかりませんが、アダプターをリストビューに設定していないので、通知されません。あなたのコードによると、リストビューはローカル変数であるため、 getAllInvoices() でもアダプターを設定できません。

于 2012-12-07T11:38:37.313 に答える