2016-03-02 3 views
0

Я реализую пользовательский список в диалоговом окне предупреждения. Он показывает ошибку в списке при добавлении в пользовательский адаптер, что java.util.ArrayList нельзя применить к java.util.list.Реализация пользовательского списка в диалоговом окне предупреждения

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

Что случилось?

selectTable.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      int selected = 0; 

      TimeTableHelper th = new TimeTableHelper(getApplicationContext()); 
      final List<String> tables = new ArrayList<String>(th.getTitle()); 

      AlertDialog.Builder alertDialog = new AlertDialog.Builder(AddEventActivity.this); 
      LayoutInflater inflater = getLayoutInflater(); 
      View convertView = (View) inflater.inflate(R.layout.alertlistrow, null); 
      alertDialog.setView(convertView); 
      ListView lv = (ListView) convertView.findViewById(R.id.listView1); 

      adapter=new CustomAlertAdapter(AddEventActivity.this, tables); 
      lv.setAdapter(adapter); 

      alertDialog.setSingleChoiceItems(adapter,selected, 
        new DialogInterface.OnClickListener() { 

         public void onClick(DialogInterface dialog, int item) { 

          ListView lw = ((AlertDialog)dialog).getListView(); 
          Object checkedItem = lw.getAdapter().getItem(lw.getCheckedItemPosition()); 

          txtTable.setText(String.valueOf(checkedItem)); 
          dialog.dismiss(); 
         } 
        }); 
      alertDialog.show(); 

     } 
    }); 

CustomAlertAdapter

public class CustomAlertAdapter extends BaseAdapter{ 

     Context ctx=null; 
     ArrayList<String> listarray=null; 
     private LayoutInflater mInflater=null; 
     public CustomAlertAdapter(Activity activty,ArrayList<String> list) 
     { 
      this.ctx=activty; 
      mInflater = activty.getLayoutInflater(); 
      this.listarray=list; 
     } 
     @Override 
     public int getCount() { 

      return listarray.size(); 
     } 

     @Override 
     public Object getItem(int arg0) { 
      return null; 
     } 

     @Override 
     public long getItemId(int arg0) { 
      return 0; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup arg2) { 
      final ViewHolder holder; 
      if (convertView == null) { 
       holder = new ViewHolder(); 
       convertView = mInflater.inflate(R.layout.alertlistrow, null); 
       holder.titlename = (TextView) convertView.findViewById(R.id.textViewTitle); 
       convertView.setTag(holder); 
      } 
      else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 

      String datavalue=listarray.get(position); 
      holder.titlename.setText(datavalue); 

      return convertView; 
     } 

     private static class ViewHolder { 
      TextView titlename; 
     } 

} 

запрос:

public ArrayList<String> getTitle() { 

    ArrayList<String> conList = new ArrayList<String>(); 


    String selectQuery = "SELECT * FROM " + TABLE_TIME_TABLE; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    if (cursor.moveToFirst()) { 
     do { 

      TimeTable table = new TimeTable(); 

      // table.setId(Integer.parseInt(cursor.getString(0))); 
      table.setTitle(cursor.getString(1)); 
      conList.add(table.getTitle()); 
     } while (cursor.moveToNext()); 
    } 

    return conList; 
} 

Спасибо.

ответ

0

Ваш CustomAlertAdapter принимает ArrayList<String> в свой конструктор. С линии

final List<String> tables = new ArrayList<String>(th.getTitle()); 

вы объявляете tables как List<String>. Это фактически создается как ArrayList<String>, но это Java - tables это просто своего рода List и поэтому следующая строка не будет работать:

adapter=new CustomAlertAdapter(AddEventActivity.this, tables); 

Что вы можете сделать?

Либо объявить tables как ArrayList<String> в первую очередь или вызвать конструктор адаптера, как это:

adapter=new CustomAlertAdapter(AddEventActivity.this, (ArrayList<String>)tables); 
+0

Кстати, в то время как это раздражает вас сейчас есть ситуации, в которых это поведение полезно. Например, если вам нужно отслеживать экземпляры разных «AsyncTask's» в вашем приложении: все они являются экземпляром «AsyncTask» и поэтому вы можете поместить их в список и в «onStop()» отменить все задачи пропустив список с помощью простого цикла foreach. – 0X0nosugar