2

詳細を含むアイテムのリストを表示するアプリケーションがあります。ユーザーが項目を選択すると、アプリは追加の詳細を表示します。拡張する 2 つのビューを作成しましRelativeLayoutた。1 つは listView 用、もう 1 つは詳細ビュー用で、両方を同じ親レイアウトに追加しました。これが私のxmlとビューのコード例です。

ListViewで見る

class MyView1 extends RelativeLayout {

        private Context context = null;

        public MyView1 (Context context) {
            super(context);
            this.context = context;
            createView();
        }

        private void createView() {

            LayoutInflater layoutInflater = (LayoutInflater) context
                    .getSystemService(Service.LAYOUT_INFLATER_SERVICE);
            View view = layoutInflater.inflate(R.layout.layout1, null);
            this.addView(view );
            listview = (ListView) findViewById(R.id.listView);
            listview.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                Object obj  = list.get(position);
                MyView1.this.removeAllViews();
                MyView1.this.addView(new MyView2(context));
            }
        });
         //Set Adapter
        }

    }

詳細を表示

class MyView2 extends RelativeLayout {

    private Context context = null;

    public MyView2(Context context) {
        super(context);
        this.context = context;
        createView();
    }


    private void createView() {

        LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Service.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.layout2s, null);
        this.addView(view );

        backbutton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                MyView2 .this.removeAllViews();
                MyView2 .this.addView(new MyView1(context));
            }
        });
    }
}

これら 2 つのビューをフレーム レイアウトに追加しました。私の問題は、このようにビューを追加/削除するとアプリケーションが遅くなることです。それらをより効率的に追加および削除するにはどうすればよいですか?

4

1 に答える 1

2

追加中

このラインはあまり効率的ではありません

View view = layoutInflater.inflate(R.layout.layout1, null);

なんで?この記事を見て

削除中

このラインはあまり効率的ではありません

MyView1.this.removeAllViews();

なんで?このメソッドは、すべての子ビューをループして削除します。削除するビュー オブジェクトがわかっている場合は、removeView(View v) 関数を使用できます。これはより効率的になります。

于 2013-01-23T11:00:26.130 に答える