1

私はそれに習慣のある習慣を持ってDialogFragmentViewます。それViewにはListViewintがあります。ボタンを押した後、またはイベントがトリガーされたときにすぐに表示したい。最初に呼び出さViewれたときにのみ、表示に数秒 (1 ~ 2 秒) かかります。次に表示される必要がある場合は、すぐに表示されます。遅延がある場合は、約 100 ~ 200 ミリ秒しかかかりません。

呼び出されるたびに の新しいインスタンスを作成してViewいるので、表示にも数秒かかるはずだと考えています。

これに対する解決策はありますか?ありがとう!

サンプルコード:

CustomDialogFragment dialog = new CustomDialogFragment();
dialog.show(getSupportFragmentManager(), "a_tag");

ダイアログは次のとおりです。

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class CustomDialogFragment extends DialogFragment implements OnItemClickListener {

    private ListView mListView;
    private CustomAdapter mAdapter;
    private ArrayList<Object> mData;


    public CustomDialogFragment() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.custom_dialog_fragment, container);
        return view;
    }

    @Override
    public void onActivityCreated(Bundle arg0) {
        super.onActivityCreated(arg0);
        mListView = (ListView) getView().findViewById(R.id.lst);
        mListView.setAdapter(mAdapter);
        mListView.setOnItemClickListener(this);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mData = new ArrayList<Object>();
        mAdapter = new CustomAdapter(getActivity(), mData);
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // TODO : Do something here
    }
}

は次のAdapterとおりです。

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomAdapter extends BaseAdapter {
    private Activity activity;
    private ArrayList<Object> data;

    private static LayoutInflater inflater;

    public CustomAdapter(Activity a, ArrayList<Object> d) {
        this.activity = a;
        this.data = d;
        inflater = ((LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE));
    }

    @Override
    public int getCount() {
        return this.data.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (convertView == null) {
            v = inflater.inflate(R.layout.table_row, null);
        }
        // TODO : Edit some UI here
        return v;
    }
}
4

1 に答える 1

2

ListView の読み込みに時間がかかっている可能性があります。ListView に画像などを含む大量のカスタム ビューがあるか、多くの要素が含まれている可能性があります。

List アダプターをプロファイリングして分析し、速度低下の正確な原因を確認する必要があります。

アクティビティが起動される前にビューをプリロードするか、その種の他の手法を使用して、最適化を試みることができます。

最初のロードでのみ発生しているという事実は、リスト項目が作成されていることを示しています。それらが生成されてメモリに格納されると、リストの表示が高速になります。

于 2013-05-08T07:49:25.827 に答える