2016-03-02 92 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()); 

聲明tablesList<String>。這是作爲一個ArrayList<String>創造的事實,但這是爪哇 - tables是隻是一種List等下面一行將不起作用:

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

你能做些什麼?

要麼宣佈tables作爲ArrayList<String>擺在首位或撥打轉接器的構造是這樣的:

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

順便說一句,而你現在在有些情況下這種行爲是非常有用的很是煩人。例如,如果您需要跟蹤應用程序中不同'AsyncTask'的實例:它們都是'AsyncTask'的實例,因此您可以將它們放入列表中並在「onStop()」中取消所有任務通過簡單的foreach循環遍歷List。 – 0X0nosugar

相關問題