-1

アプリケーションを実装しています。アプリケーションでポップウィンドウを表示しようとしています。メニュー項目がタップされるたびに、タイトルとチェック ボックスを含むポップ ウィンドウが表示されます。そのコードでは、チェックボックスにリスナーを設定しようとしていますが、残念ながらこれはアプリケーションをクラッシュさせる原因です。

以下は私のコードです。

xml で:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
android:id="@+id/popup"
android:layout_height="wrap_content"
android:background="@drawable/music_bg"
android:orientation="vertical" >
<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >
    <TextView android:id="@+id/txtTopTitleForSetInfoInput" android:text="Voice Coaching"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:textColor="#FFFFFF" android:textSize="21sp" android:gravity="center"
        android:textStyle="bold" android:layout_centerVertical="true" />

    <Button android:id="@+id/btnCloseControl" 
        android:background="@drawable/music_close"
        android:layout_width="40dip" android:layout_height="40dip"
        android:layout_alignParentRight="true" android:layout_centerVertical="true"
         />
</RelativeLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip" >
        <TextView
        android:id="@+id/txtVoiceCoaching"
        android:layout_width="200dip"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/cbVoiceCoachingOn"
        android:layout_alignParentLeft="true"
        android:layout_alignTop="@+id/cbVoiceCoachingOn"
        android:gravity="center"
        android:text="Voice Coaching"
        android:textColor="#FFFFFF"
        android:textSize="21sp"
        android:textStyle="bold" />
        <CheckBox
            android:id="@+id/cbVoiceCoachingOn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/txtVoiceCoaching" />
</RelativeLayout>

選択したメニュー項目のコード:

 @Override
 public boolean onMenuItemSelected(int featureId, MenuItem item) 
 {
    super.onMenuItemSelected(featureId, item);

            int[] location = new int[2];
            
            ll.getLocationOnScreen(location);
            
                int popupWidth = 300;
               int popupHeight = 160;
             
               Point p = new Point();
               p.x = location[0];
               p.y = location[1];
               
               // Inflate the popup_layout.xml
               LinearLayout viewGroup = (LinearLayout) this.findViewById(R.id.popup);
               LayoutInflater layoutInflater = (LayoutInflater) this
                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
               View layout = layoutInflater.inflate(R.layout.volume_pop_layout, viewGroup);
             
               // Creating the PopupWindow
               final PopupWindow popup = new PopupWindow(this);
               popup.setContentView(layout);
               popup.setWidth(popupWidth);
               popup.setHeight(popupHeight);
               popup.setFocusable(true);
             
               // Some offset to align the popup a bit to the right, and a bit down, relative to button's position.
               int OFFSET_X = 10;
               int OFFSET_Y = -40;
             
               // Clear the default translucent background
               popup.setBackgroundDrawable(new BitmapDrawable());
             
               // Displaying the popup at the specified location, + offsets.
               popup.showAtLocation(layout, Gravity.NO_GRAVITY, p.x + OFFSET_X, p.y + OFFSET_Y);

               Button close = (Button) layout.findViewById(R.id.btnCloseControl);
               close.setOnClickListener(new OnClickListener() {
             
                 @Override
                 public void onClick(View v) {
                   popup.dismiss();
                 }
               });
               
               CheckBox cbVoiceCoahcingOn = (CheckBox) findViewById(R.id.cbVoiceCoachingOn);
               if(cbVoiceCoahcingOn==null)
               {
                   System.out.println("cbVoiceCoahcingOn==null");
               }
               
               cbVoiceCoahcingOn.setOnClickListener(new OnClickListener() {
                     
                     @Override
                     public void onClick(View v) {
                       System.out.println("onclick");
                     }
                   });

    return true;
}
4

1 に答える 1

0

あなたはここで間違いを犯しました:

CheckBox cbVoiceCoahcingOn = (CheckBox) findViewById(R.id.cbVoiceCoachingOn);

間違い: Dialog のインフレート レイアウトからではなく、メインの XML レイアウトから View を見つけようとしています。

正しい:

CheckBox cbVoiceCoahcingOn = (CheckBox) layout.findViewById(R.id.cbVoiceCoachingOn);
于 2013-03-20T11:04:45.723 に答える