2016-03-03 53 views
0

我正在警報對話框中實施自定義列表視圖。它沒有顯示任何視圖。無法在警報對話框中獲取自定義列表視圖

我創建了一個查詢來獲取表格中的標題列表。我想在警報對話框中顯示此列表。

怎麼回事?

警告對話框:

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.tablelist, null ,false); 
      alertDialog.setView(convertView); 
      ListView lv = (ListView) convertView.findViewById(R.id.list); 

      CustomAlertAdapter adapter = new CustomAlertAdapter(AddEventActivity.this, (ArrayList<String>)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.tableTitle); 
      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; 
    } 

alertlistrow佈局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:weightSum="1" 
    android:orientation="vertical" 
    android:measureWithLargestChild="false"> 


     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@android:color/white"> 
      <Button 
       android:layout_width="30dp" 
       android:layout_height="30dp" 
       android:layout_gravity="center|right" 
       android:background="@drawable/circle_shape" 
       android:id="@+id/selectColor" 
       android:layout_alignTop="@+id/switch2" 
       android:layout_alignParentStart="true" 
       android:layout_marginLeft="20dp" /> 
      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="@android:style/TextAppearance.Medium" 
       android:id="@+id/tableTitle" 
       android:layout_alignParentLeft="false" 
       android:layout_alignParentStart="false" 
       android:layout_centerVertical="true" 
       android:layout_toRightOf="@+id/selectColor" 
       android:layout_marginLeft="10dp" /> 


     </RelativeLayout> 


</LinearLayout> 

回答

0

你應該在的地方使用DialogAlertDialog象下面這樣: -

final Dialog dialog = new Dialog(YOUR_CONTEXT.this); 
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
    dialog.setContentView(R.layout.CREATE_YOUR_LAYOUT_HERE); 

    pop_up_list = (ListView) dialog.findViewById(R.id.tablelist); 

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

    pop_up_list.setAdapter(adapter); 

    dialog.setTitle(null); 
    dialog.setCancelable(true); // AS YOUR REQUIREMENT , YOU CAN SET IT FALSE... TO NOT DISMISS THE DIALOG 
    dialog.show(); 
+0

我應該在哪裏添加列表視圖?在哪個佈局? – user5881997

+0

您必須在佈局字段中爲您的dilaog創建佈局,並使用上述代碼 –

+0

我已創建包含listview的alertlistrow佈局和表格佈局。 – user5881997

0

根據需要更改選擇模式並自定義您的適配器。不要設置任何佈局,只需設置適配器。

public static AlertDialog dialog; 


public static void showMultiChoiceDialog(Context context, String title, ArrayAdapter arrayAdapter) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(context,style.Theme_Holo_Light_Dialog); 
    builder.setTitle(title); 
    builder.setAdapter(arrayAdapter,null); 
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      dialog.dismiss(); 
     } 
    }); 
    if (dialog == null || !dialog.isShowing()) { 
     dialog = builder.create(); 
     dialog.getListView().setItemsCanFocus(false); 
     dialog.getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); 
     dialog.show(); 
    } 
} 
0

嘗試使用DialogFragment。對話框沒有生命週期。哪裏有對話框片段有生命週期,你可以控制它。對話框片段實現片段。

一個片段,它顯示一個對話窗口,它浮動在其活動窗口之上。這個片段包含一個Dialog對象,它根據片段的狀態適當地顯示它。對話框的控制(決定何時顯示,隱藏,解除)應通過此處的API完成,而不是直接調用對話框。

實現應該重寫此類並實現onCreateView(LayoutInflater,ViewGroup,Bundle)來提供對話框的內容。或者,他們可以重寫onCreateDialog(Bundle)以創建一個完全自定義的對話框,例如AlertDialog及其自己的內容。

在這裏閱讀: http://developer.android.com/reference/android/app/DialogFragment.html

相關問題