2017-01-05 7 views
2

Я использую AlertDialog для отображения изображений из файла, но когда я нажимаю кнопку, чтобы открыть диалоговое окно, приложение перестанет замораживаться в течение 6 секунд, а затем отобразит диалоговое окно предупреждения.Android-обработчик

Мой код:

listView_prev.setOnItemClickListener(new AdapterView.OnItemClickListener() { 


     @Override 
     public void onItemClick(AdapterView<?> arg0, final View arg1, int arg2, long arg3) { 
      //listview click event handling 
      TextView id = (TextView) arg1.findViewById(R.id.textView17); 
      final int id_To_Search = Integer.valueOf(id.getText().toString()); 
      Cursor item=mydb.singlecons(id_To_Search); 
      Cursor att=mydb.attrs(id_To_Search); 
      Cursor picloc=mydb.singleconspic(id_To_Search); 
      att.moveToFirst(); 
      List<String> list = new ArrayList<>(); 
      // Log.d("temp",att.getColumnName(1)); 

      while (!att.isAfterLast()) 
      { 
       int l=att.getColumnCount(); 
       Log.d("length", String.valueOf(l)); 
       for(int i=2;i<l;i++){ 
        Log.d("for","for"); 
        if(att.getString(i)!=null){ 
         String b= att.getColumnName(i)+" "+att.getString(i); 
         list.add(b); 
         Log.d("att",b); 
        } 
       } 
       Log.d("while","while"); 
       att.moveToNext(); 
      } 
      att.close(); 
      Log.d("list", String.valueOf(list)); 
      picloc.moveToFirst(); 

      FilePathStrings = new String[picloc.getCount()]; 
      int i=0; 
      while (!picloc.isAfterLast()){ 
       Log.d("picloc",picloc.getString(2)); 
       FilePathStrings[i]=picloc.getString(2); 
       i++; 
       picloc.moveToNext(); 
      } 

      item.moveToFirst(); 

      AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(Consultation.this); 
      LayoutInflater inflater = getLayoutInflater(); 
      View dialogView = inflater.inflate(R.layout.alert_label_editor, null); 
      dialogBuilder.setView(dialogView); 

      TextView con=(TextView)dialogView.findViewById(R.id.textView29); 
      con.setText("Consultation on "+item.getString(4)); 
      TextView des=(TextView)dialogView.findViewById(R.id.textView28); 
      des.setText(item.getString(2)); 
      TextView pre=(TextView)dialogView.findViewById(R.id.textView31); 
      pre.setText(item.getString(3)); 
      TextView fee=(TextView)dialogView.findViewById(R.id.textView32); 
      fee.setText(item.getString(5)); 
      adapter1 = new GridViewAdapter(FilePathStrings,getApplicationContext()); 
      grid = (GridView) dialogView.findViewById(R.id.gridview); 
      grid.setAdapter(adapter1); 
      grid.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> parent, View view, 
             int position, long id) { 

        Intent intent = new Intent(); 
        intent.setAction(Intent.ACTION_VIEW); 
        intent.setDataAndType(Uri.parse("file://" + FilePathStrings[position]), "image/*"); 
        startActivity(intent); 
       } 

      }); 
      AlertDialog alertDialog = dialogBuilder.create(); 
      alertDialog.show(); 

Gridviewadapter.java

class GridViewAdapter extends BaseAdapter { 

private String[] filepath; 
private static LayoutInflater inflater = null; 
GridViewAdapter(String[] fpath,Context context) { 
    filepath = fpath; 
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

} 
public int getCount() { 
    return filepath.length; 

} 

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

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

public View getView(final int position, View convertView, ViewGroup parent) { 
    View vi = convertView; 
    if (convertView == null) 
     vi = inflater.inflate(R.layout.gridview_item, null); 
     ImageView image = (ImageView) vi.findViewById(R.id.image); 
     Bitmap bmp = BitmapFactory.decodeFile(filepath[position]); 

    Bitmap thumbBitmap = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(filepath[position]),320,240); 

    image.setImageBitmap(thumbBitmap); 

     return vi; 
} 
} 

Как я могу решить эту проблему? Я знаю, что handler поможет здесь, может ли кто-нибудь помочь мне в решении этой проблемы?

+0

Можете ли вы снова сказать мне, Что вопрос, и что вы хотите достичь? –

+0

Мне нужно удалить это время замораживания, когда кликайте по списку –

+0

Не создавайте новые объекты каждый раз, когда вы нажимаете ... и если вы можете выполнить свою задачу в фоновом потоке –

ответ

1

Я хочу, чтобы приложение, чтобы заморозить в течение 6 секунд, а затем показать предупреждение диалога

На onItemClick методы делать 3-4 операции БД с помощью вызова singlecons,attrs,singleconspic методов, а также чтения данных из Cursor's. это покажет пользовательский интерфейс без каких-либо действий.

Рекомендация: вместо Handler используйте AsyncTask для вызова всех методов БД и получения данных из Курсора.

Put подождите 6 секунд, прежде чем doInBackground возвращающихся данные onPostExecute

+0

отредактировал мой вопрос –

+0

@Tom: Что вы обновили? –

+0

Мое приложение зависает, когда я нажимаю на просмотр списка из-за тяжелой загрузки процесса при показе изображения в диалоговом окне предупреждения .... Как я могу решить эту проблему ... –

0

Вашего приложение морозильное на несколько секунды, потому что вы делаете операцию запроса к БД на главном потоке. Основной поток, который блокируется, показывает отставание в пользовательском интерфейсе.

Да, вы можете использовать AsyncTask для этого https://developer.android.com/reference/android/os/AsyncTask.html

+0

, когда нет файла изображения, тогда его нормально .... каждая операция курсора работает отлично .... –