2014-11-03 108 views
1

我正在一个应用程序中,我有一个导航抽屉。导航抽屉缓慢打开

开始时,当抽屉被打开时,它工作得很快且平稳。但是我在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()中使用的很多代码,但我不确定。

回答

0

在我们的应用程序中检查您是否在super.onDrawerClosed(view);之前打开片段。叫做。

如果在此之前打电话,您可能会感觉到抽屉关闭缓慢。

移动你的代码后super.onDrawerClosed(视图);在onDrawerClosed方法中。