Android:第一次显示ListView需要几秒钟的时间
我有一个自定义的Android:第一次显示ListView需要几秒钟的时间,android,android-listview,android-dialogfragment,Android,Android Listview,Android Dialogfragment,我有一个自定义的对话框片段,其中有一个自定义的视图。该视图有一个列表视图int。我想在按下按钮或触发事件后立即显示它。视图仅在第一次调用时才需要几秒钟的时间显示,1到2秒钟。下一次它必须出现,它立即出现,或者如果有延迟,它只需要大约100-200毫秒 每次调用视图时,我都会创建它的新实例,所以我认为它也需要几秒钟才能显示出来 有什么解决办法吗?谢谢 示例代码: CustomDialogFragment dialog = new CustomDialogFragment(); dialog.sho
对话框片段
,其中有一个自定义的视图
。该视图
有一个列表视图
int。我想在按下按钮或触发事件后立即显示它。视图
仅在第一次调用时才需要几秒钟的时间显示,1到2秒钟。下一次它必须出现,它立即出现,或者如果有延迟,它只需要大约100-200毫秒
每次调用视图时,我都会创建它的新实例,所以我认为它也需要几秒钟才能显示出来
有什么解决办法吗?谢谢
示例代码:
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
}
}
加载ListView可能需要一些时间。ListView中可能有大量自定义视图,其中包含图像等,或者可能有许多元素
您应该评测并分析列表适配器,以查看到底是什么导致了速度减慢
然后,您可以尝试通过在活动启动之前预加载视图或其他类似技术来优化它
它仅在第一次加载时发生这一事实表明正在创建列表项。一旦它们被生成并存储在内存中,显示列表的速度就会更快。感谢您的回复。是否有方法加载视图
,它包含图像视图
s,而不调用show()
方法?因为,只有在调用show()
方法之后才能构造视图
?您可以使用类似Drawable d=context.getResources.getDrawable(R.Drawable.image1)
。这会将drawable加载到内存中,并将其保持在内存中,只要有对它的引用。任何引用同一绘图表的视图都可以快速访问它。你必须小心不要耗尽内存并导致崩溃。另一件事,我试图从ImageView
中删除Image
,这是视图的背景,但加载速度与原始视图一样快,即带有背景的图像。所以,我认为这不是因为图像。
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;
}
}