1

DialogFragment 内にある Android の SeekBar から読み込もうとしています。クラッシュし続けます。SeekBar だけでも問題はありませんが、関数をオーバーライドしようとすると、SeekBar を何かに使用できるようになり、クラッシュし続けます。基本的に、他の人が作業コードとして投稿したものをコピーしようとしましたが (DialogFragment 内ではありません)、機能しません。誰かがここで何が悪いのか教えてもらえますか?

    numColumnsControl = (SeekBar) getActivity().findViewById(R.id.seekBar1);
    numColumnsControl.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
    {
        //@Override
        public void onProgressChanged(SeekBar arg0, int progress, boolean fromTouch) 
        {
            ((TextView) (getActivity().findViewById(R.id.textView2))).setText(String.valueOf(progress));

        }

        //@Override
        public void onStartTrackingTouch(SeekBar arg0) 
        {
            // TODO Auto-generated method stub

        }

        //@Override
        public void onStopTrackingTouch(SeekBar arg0) 
        {
            // TODO Auto-generated method stub

        }
    });`

DialogFragment を開くアクションを実行するたびにクラッシュし続けます。セクション全体をコメントアウトすると問題ありません。問題は、それらが空の場合でも、これらの関数を何らかの形でオーバーライドすることです。このセクション全体がコメント化されると、View に SeekBars と TextViews が表示されます。

これは重要ではないと思いますが、DialogFragment の XML は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/titleText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text="Settings"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_below="@+id/seekBar1"
        android:layout_marginTop="20dp"
        android:text="NumShifts"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <SeekBar
        android:id="@+id/seekBar1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView2" 
        android:gravity="center"
        android:layout_gravity="center"
        android:max="15"
        android:progress="6"
        android:secondaryProgress="0"/>

    <SeekBar
        android:id="@+id/SeekBar01"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView3" 
        android:gravity="center"
        android:layout_gravity="center"
        android:max="9"
        android:progress="3"
        android:secondaryProgress="0"/>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/titleText"
        android:layout_below="@+id/titleText"
        android:layout_marginTop="18dp"
        android:text="NumColumns"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</RelativeLayout>

</LinearLayout>

クラスのコード全体は次のとおりです。

package com.example.[I have to hide this name];

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

public class SettingsDialogueFragment extends DialogFragment
{
private int numColums;
private int numShifts;
private Context ctx;
private SeekBar numColumnsControl = null;

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) 
{
    ctx = getActivity();
    // Use the Builder class for convenient dialog construction
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater= getActivity().getLayoutInflater();


    builder.setView(inflater.inflate(R.layout.settings_menu, null))
        .setPositiveButton("DONE", new DialogInterface.OnClickListener() 
        {
            public void onClick(DialogInterface dialog, int id) 
            {
                //done
            }
        })
        .setNegativeButton("CANCEL", new DialogInterface.OnClickListener() 
        {
            public void onClick(DialogInterface dialog, int id) 
            {
                // User cancelled the dialog
            }
        });
    // Create the AlertDialog object and return it
    LinearLayout settings = new LinearLayout(ctx);

    numColumnsControl = (SeekBar) getActivity().findViewById(R.id.seekBar1);
    Activity myActivity = getActivity();
    if(myActivity == null)
    {
        Log.e("bill", "bill");
    }
    if(numColumnsControl == null)
    {
        Log.e("smith", "smith");
    }
    numColumnsControl.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
    {
        //@Override
        public void onProgressChanged(SeekBar arg0, int progress, boolean fromTouch) 
        {
            ((TextView) (getActivity().findViewById(R.id.textView2))).setText(String.valueOf(progress));
            Log.e("asd", "asd");

        }

        //@Override
        public void onStartTrackingTouch(SeekBar arg0) 
        {
            Log.e("asdf", "asdf");
            // TODO Auto-generated method stub

        }

        //@Override
        public void onStopTrackingTouch(SeekBar arg0) 
        {
            Log.e("asdfg", "asdfg");
            // TODO Auto-generated method stub

        }
    });

    return builder.create();
}
}
4

1 に答える 1