2

我试图按照this教程实现自定义DialogFragment。我的问题是我无法处理我的自定义视图的button.setOnClickListener事件。最奇怪的部分是我没有任何问题,我的按钮的.getText(),我只是找不到处理点击事件的方式。贝娄是我的代码:View.OnClickListener在自定义DialogFragment中

SettingsDialogFragment.java

public class SettingsDialogFragment extends DialogFragment 
{ 
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) 
{ 

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    // Get the layout inflater 
    LayoutInflater inflater = getActivity().getLayoutInflater(); 
    final View view = inflater.inflate(R.layout.dialog_settings, null); 

    final Button colorButton =(Button) view.findViewById(R.id.colorButton_dialogSettings); 
    String s = colorButton.getText().toString(); 
    System.out.println("its working "+s); 

    //NOT working 
    colorButton.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      System.out.println("OnClick"); 
     } 
    }); 

    // Inflate and set the layout for the dialog 
    // Pass null as the parent view because its going in the dialog layout 
    builder.setView(inflater.inflate(R.layout.dialog_settings, null)) 
      // Add action buttons 
      .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) 
       { 

       } 
      }) 
      .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        SettingsDialogFragment.this.getDialog().cancel(); 
       } 
      }); 
    return builder.create(); 
} 

` 我的自定义视图代码(dialog_settings.xml)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" 
      android:layout_width="200dp" 
      android:layout_height="wrap_content"> 
<EditText 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:gravity="center" 
    android:scaleType="center" 
    android:background="#00CCCC" 
    android:contentDescription="@string/app_name" 
    android:text="@string/dialog_settings_title" 
    android:id="@+id/editText"/> 
<Button 
    android:id="@+id/colorButton_dialogSettings" 
    android:inputType="textEmailAddress" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/color_picker_title" 
    android:layout_below="@+id/editText" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    /> 

<RadioButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Stroke" 
    android:layout_marginLeft="55dp" 
    android:id="@+id/radioButtonStroke" 
    android:checked="false" 
    android:layout_below="@+id/colorButton_dialogSettings" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true"/> 

<RadioButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Fill" 
    android:id="@+id/radioButton_fill" 
    android:checked="false" 
    android:layout_below="@+id/colorButton_dialogSettings" 
    android:layout_toRightOf="@+id/radioButtonStroke" 
    android:layout_toEndOf="@+id/radioButtonStroke" 
    android:layout_marginLeft="10dp" 
    /> 

+0

尝试更改为'colorButton.setOnClickListener(new DialogInterface.OnClickListener()' – Johnny

+0

由于DialogFragment没有实现它,因此无法使用DialogInterface.OnClickListener [link](http://developer.android.com/reference/ android/app/DialogFragment.html) –

回答

6

我只是显示你的重要组成部分。我希望你能找到各自的行代码中的

final View view = inflater.inflate(R.layout.dialog_settings, null); 
// inflating your view..for drawback, this line is [A] 

colorButton已经到view.findViewById(R.id.colorButton_dialogSettings)参考这是..这你引用一个onclick侦听器的ViewGroup view它..

builder.setView(inflater.inflate(R.layout.dialog_settings, null)) 

此代码在这里设置您的对话框的内容视图。它膨胀一个布局和做它的工作..所以你builder没有引用它的内容视图view而是一个新的充气R.layout.dialog_settings布局结束..

所以要解决这个问题只是这样做

builder.setView(view) // hope you know the view parameter 

view是你行实例化什么[A] ..

希望我是有道理的,并足够清晰的you..let我知道,如果它可以帮助

+1

我不敢相信我错过了这个...谢谢! –

0

新建答案

变化你的onCreateDialog这样:

import android.view.View.OnClickListener; 

public class SettingsDialogFragment extends DialogFragment implements onClickListener 
{ 
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) 
{ 

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    // Get the layout inflater 
    LayoutInflater inflater = getActivity().getLayoutInflater(); 
    final View view = inflater.inflate(R.layout.dialog_settings, null); 

    final Button colorButton =(Button) view.findViewById(R.id.colorButton_dialogSettings); 
    String s = colorButton.getText().toString(); 
    System.out.println("its working "+s); 

    colorButton.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      switch (v.getId()) { 
       case R.id.colorButton_dialogSettings 
        System.out.println("OnClick"); 
        break; 
       default: 
        break; 
     } 
    }); 

    // Inflate and set the layout for the dialog 
    // Pass null as the parent view because its going in the dialog layout 
    builder.setView(inflater.inflate(R.layout.dialog_settings, null)) 
      // Add action buttons 
      .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) 
       { 

       } 
      }) 
      .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        SettingsDialogFragment.this.getDialog().cancel(); 
       } 
      }); 
    return builder.create(); 
} 

在你的活动:

private Button colorButton = (Button) findViewById(R.id.colorButton_dialogSettings);

**旧的答案,需要你写你自己的showDialog method* *

尝试删除按钮的代码在onCreateDialog和加入:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_dialog, container, false); 
     Button colorButton =(Button) v.findViewById(R.id.colorButton_dialogSettings); 
      public void onClick(View v) { 
      // When button is clicked, call up to owning activity. 
       ((FragmentDialog)getActivity()).showDialog(); 
       System.out.println("OnClick"); 
      } 
     }); 

     return v; 
相关问题