导航抽屉缓慢打开
问题描述:
我正在一个应用程序中,我有一个导航抽屉。导航抽屉缓慢打开
开始时,当抽屉被打开时,它工作得很快且平稳。但是我在onCreateView()
中添加了一些代码,用于填充listView的数据,其中包含7个文本和1个小图像,显着减慢。我怎样才能改善抽屉的行为?
这里面的代码我`onCreateView()〜(这是在一个PlaceHolderFragment)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
startDate=(EditText)rootView.findViewById(R.id.startDate);
endDate=(EditText)rootView.findViewById(R.id.endDate);
setDates();
final DatePickerDialog.OnDateSetListener datePickerListenerInicio = new DatePickerDialog.OnDateSetListener() {
// when dialog box is closed, below method will be called.
public void onDateSet(DatePicker view, int selectedYear,int selectedMonth, int selectedDay) {
selectedMonth++;
day = selectedDay;
month = selectedMonth-1;
year = selectedYear;
String temp;
if(selectedDay < 10)
{
temp = "0"+selectedDay+"/";
}
else
{
temp = selectedDay+"/";
}
if(selectedMonth < 10)
{
temp +="0"+selectedMonth+"/";
}
else
{
temp +=selectedMonth+"/";
}
temp +=selectedYear;
fechaInicio=temp;
startDate.setText(fechaInicio);
}
};
startDate.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
try
{
DatePickerDialog datePicker = new DatePickerDialog(getActivity(),
datePickerListenerInicio,
year,
month,
day);
datePicker.setCancelable(true);
datePicker.setTitle("Seleccione la fecha");
datePicker.getDatePicker().setDescendantFocusability(DatePicker.FOCUS_BLOCK_DESCENDANTS);
datePicker.show();
}
catch (Exception e)
{
}finally {
startDate.clearFocus();
}
}
}
});
final DatePickerDialog.OnDateSetListener datePickerListenerFinal = new DatePickerDialog.OnDateSetListener() {
// when dialog box is closed, below method will be called.
public void onDateSet(DatePicker view, int selectedYear,int selectedMonth, int selectedDay) {
selectedMonth++;
day = selectedDay;
month = selectedMonth-1;
year = selectedYear;
String temp;
if(selectedDay < 10)
{
temp = "0"+selectedDay+"/";
}
else
{
temp = selectedDay+"/";
}
if(selectedMonth < 10)
{
temp +="0"+selectedMonth+"/";
}
else
{
temp +=selectedMonth+"/";
}
temp +=selectedYear;
fechaFinal=temp;
endDate.setText(fechaFinal);
}
};
endDate.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
try
{
DatePickerDialog datePicker = new DatePickerDialog(getActivity(),
datePickerListenerFinal,
year,
month,
day);
datePicker.setCancelable(true);
datePicker.setTitle("Seleccione la fecha");
datePicker.getDatePicker().setDescendantFocusability(DatePicker.FOCUS_BLOCK_DESCENDANTS);
datePicker.show();
}
catch (Exception e)
{
}finally {
endDate.clearFocus();
}
}
}
});
populateRegistros();
populateListView(rootView);
registroCallBack(rootView);
return rootView;
}
这是populateRegistros代码
private void populateRegistros() {
mRegistro.add(new Registro("Jose Andres Valencia Acosta","JVALENCIA-PC","Informática","08:50:30","Chrome","Youtube","7:10:25",R.drawable.logo));
mRegistro.add(new Registro("Jose Angel Caballero Preciado","JCABALLERO-PC","Informática","08:50:30","Chrome","Youtube","7:10:25",R.drawable.logo));
mRegistro.add(new Registro("Jose Andres Valencia Acosta","JVALENCIA-PC","Informática","08:50:30","Chrome","Youtube","7:10:25",R.drawable.logo));
mRegistro.add(new Registro("Jose Andres Valencia Acosta","JVALENCIA-PC","Informática","08:50:30","Chrome","Youtube","7:10:25",R.drawable.logo));
mRegistro.add(new Registro("Jose Andres Valencia Acosta","JVALENCIA-PC","Informática","08:50:30","Chrome","Youtube","7:10:25",R.drawable.logo));
mRegistro.add(new Registro("Jose Andres Valencia Acosta","JVALENCIA-PC","Informática","08:50:30","Chrome","Youtube","7:10:25",R.drawable.logo));
}
的populateListView代码:
private void populateListView(View rootView) {
ArrayAdapter<Registro> mAdapter=new MyListAdapter();
ListView list=(ListView)rootView.findViewById(R.id.list_registros);
list.setAdapter(mAdapter);
}
类MyListAdapter和itemClick的最终方法
private class MyListAdapter extends ArrayAdapter<Registro>{
public MyListAdapter(){
super(getActivity(),R.layout.item_view,mRegistro);
}
@Override
public View getView(int position,View convertView,ViewGroup parent){
//Make sure we have a view to work with (May have been given null)
View itemView=convertView;
if(itemView==null){
itemView=getActivity().getLayoutInflater().inflate(R.layout.item_view,parent,false);
}
//Find the register to work with
Registro registro=mRegistro.get(position);
//General
TextView general=(TextView)itemView.findViewById(R.id.txtGENERAL);
general.setText(registro.getGeneral());
//Terminal
TextView terminal=(TextView)itemView.findViewById(R.id.txtTERMINAL);
terminal.setText(registro.getTerminal());
//Area
TextView area=(TextView)itemView.findViewById(R.id.txtAREA);
area.setText(registro.getArea());
//Uso
TextView uso=(TextView)itemView.findViewById(R.id.txtUSO);
uso.setText(registro.getUso());
//Proceso
TextView proceso=(TextView)itemView.findViewById(R.id.txtPROCESO);
proceso.setText(registro.getProceso());
//Actividad
TextView actividad=(TextView)itemView.findViewById(R.id.txtACTIVIDAD);
actividad.setText(registro.getActividad());
//Tiempo Perdido
TextView tiempoPerdido=(TextView)itemView.findViewById(R.id.txtTIEMPOPERDIDO);
tiempoPerdido.setText(registro.getTiempoPerdido());
//Imagen
ImageView imageView=(ImageView)itemView.findViewById(R.id.imgFOTO);
imageView.setImageResource(registro.getIcon());
return itemView;
}
}
private void registroCallBack(View rootView) {
ListView list=(ListView)rootView.findViewById(R.id.list_registros);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Registro clickedRegistro=mRegistro.get(position);
String mensaje="Posicion: "+position
+" Usuario: "+clickedRegistro.getGeneral();
Toast.makeText(getActivity(),mensaje,Toast.LENGTH_SHORT).show();
}
});
}
我认为问题是我在onCreateView()
中使用的很多代码,但我不确定。
答
在我们的应用程序中检查您是否在super.onDrawerClosed(view);之前打开片段。叫做。
如果在此之前打电话,您可能会感觉到抽屉关闭缓慢。
移动你的代码后super.onDrawerClosed(视图);在onDrawerClosed方法中。