Android:显示ListView在第一次尝试时显示几秒钟

时间:2013-05-08 07:44:53

标签: android android-listview android-dialogfragment

我有一个自定义DialogFragment,其中包含自定义View。那View有一个ListView int。我想在按下按钮或触发事件后立即显示它。 View只需要在第一次调用时显示1到2秒。它必须出现,它会立即出现,或者如果有延迟,它只需要大约100-200ms。

我每次调用时都会创建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;
    }
}

1 个答案:

答案 0 :(得分:2)

ListView可能需要一些时间才能加载。在ListView中可能有大量的自定义视图与图像等,或者它可能有许多元素。

您应该对List适配器进行分析和分析,以查看究竟导致速度减慢的原因。

然后,您可以尝试通过在启动活动之前预加载视图或其他某种技术来优化它。

它仅在第一次加载时发生这一事实表明正在创建列表项。一旦生成它们并在内存中,显示列表将会更快。