2015-10-19 24 views
0

取代默認的Android對話框列表我設計了一個自定義的layoutdialoglist,使用戶選擇從list只有一個選擇,我想用它代替默認dialog的。我真的不知道該怎麼做。 我有這fragmentinterface下面顯示;如何使用自定義對話框列表

import android.app.AlertDialog; 
import android.app.Dialog; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.support.v4.app.DialogFragment; 
import android.widget.Toast;` 


public class SingleChoiceClass extends DialogFragment {` 

    final CharSequence[] items = {"b1", "b2", "b3", "b4"}; 
    String selection; 
    @NonNull 
    @Override 


    public Dialog onCreateDialog(Bundle savedInstanceState) { 

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());` 


    builder.setTitle("Choose").setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface arg0, int arg1) { 
     switch (arg1){ 
      case 0: 
       selection = (String) items[arg1]; 
       break; 
      case 1: 
       selection = (String) items[arg1]; 
       break; 
      case 2: 
       selection = (String) items[arg1]; 
       break; 
      case 3: 
       selection = (String) items[arg1]; 
       break; 

       } 

     } 
    }).setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 


      // Display toast with the user's selection 
      Toast.makeText(getActivity(), "Your choice is : " + selection, Toast.LENGTH_SHORT).show(); 

      } 
     }); 
     return builder.create(); 
    } 
    } 

而且我自定義layout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="350dp" 
    android:layout_height="350dp" 
    android:background="@color/button_material_light" 
    android:layout_gravity="center"> 


    <TextView 
     android:layout_width="350dp" 
     android:layout_height="50dp" 
     android:text="@string/textview" 
     android:layout_gravity="top" 
     android:paddingLeft="5dp" 
     android:paddingRight="5dp" 
     android:layout_marginTop="20dp" 
     android:textSize="30sp" 
     android:textAlignment="center" 
     android:textStyle="normal" 
     android:id="@+id/textview" /> 


    <RadioGroup 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 


     <RadioButton 
      android:layout_width="match_parent" 
      android:layout_height="55dp" 
      android:text="@string/radio1" 
      android:checked="false" 
      android:id="@+id/radio1" 
      android:textSize="25sp" 
      android:background="#2bf308" 
      android:clickable="true" /> 
     <RadioButton 
      android:layout_width="match_parent" 
      android:layout_height="55dp" 
      android:checked="false" 
      android:text="@string/radio2" 
      android:id="@+id/radio2" 
      android:textSize="25sp" 
      android:background="#f4fd02" 
      android:clickable="true" /> 
     <RadioButton 
      android:layout_width="match_parent" 
      android:layout_height="55dp" 
      android:text="@string/radio3" 
      android:checked="false" 
      android:id="@+id/radio3" 
      android:textSize="25sp" 
      android:background="#fb8e35" 
      android:clickable="true" /> 
     <RadioButton 
      android:layout_width="match_parent" 
      android:layout_height="55dp" 
      android:text="@string/radio4" 
      android:checked="false" 
      android:id="@+id/radio4" 
      android:textSize="25sp" 
      android:background="#fc3434" 
      android:clickable="true" /> 
    </RadioGroup> 

    <Button 
     android:layout_width="match_parent" 
     android:layout_height="65dp" 
     android:text="@string/button" 
     android:id="@+id/button2" 
     android:layout_gravity="center_horizontal" 
     android:textSize="25sp" 
     android:clickable="true" /> 

</LinearLayout> 

代碼工作正常,但我需要用我的自定義dialog而不是默認的。提前致謝。

+0

[這個答案](http://stackoverflow.com/a/17462904/4924793)在解決這個問題幫我。 – Emzor

回答

1

請嘗試這個

//Please try this 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 

     AlertDialog dailog = new AlertDialog(getActivity());` 

     LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View view = inflater.inflate(R.layout.custom_layout, null); 

     dialog.setTitle("Choose").setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface arg0, int arg1) { 
       switch (arg1){ 
       case 0: 
        selection = (String) items[arg1]; 
        break; 
       case 1: 
        selection = (String) items[arg1]; 
        break; 
       case 2: 
        selection = (String) items[arg1]; 
        break; 
       case 3: 
        selection = (String) items[arg1]; 
        break; 

       } 

      } 
     }).setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 


       // Display toast with the user's selection 
       Toast.makeText(getActivity(), "Your choice is : " + selection, Toast.LENGTH_SHORT).show(); 

      } 
     }); 
     dialog.setView(view); 
     return view; 
    } 
+0

感謝您的幫助dex。我應該在Diaog片段還是在我的MainActivity文件中嘗試此操作? – Emzor

+0

在對話框片段 – dex

1

我更新我的答案,你想ListView自定義視圖。首先在你的custom佈局添加ListView象下面這樣:

<ListView 
    android:id="@+id/listView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 
</ListView> 

接下來,您將需要創建一個adapter設置爲創建ListView,你可以在你onCreateDialog()方法做類似下面

public Dialog onCreateDialog(Bundle savedInstanceState) { 

    ListView listView; 

    LayoutInflater inflater = getActivity().getLayoutInflater(); 
    View dialogView = inflater.inflate(R.layout.custom_layout, null); 
    listView = (ListView)dialogView.findViewById(R.id.listView); // inflating from custom layout. 


    builder.setView(dialogView); 

} 

此外,您需要爲適配器的getView()方法中的行創建Adapterinflate佈局,然後將該適配器設置爲ListView

以及處理點擊事件,您listView你可以做到這樣的,

listView.setOnItemClickListener(new OnItemClickListener() { 

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


        } 
      });  
+0

感謝您的幫助Satyen,我可以將ListView與我現有的radioButton結合? – Emzor