0

動的テキストでアラートダイアログを作成しようとしています。問題は、編集したいテキストビューが膨らんだレイアウトになっていることです。私のコードの一番上にあるのは

 TextView tv;

クラスのすべてのメソッドからアクセスできます。以下のコードスニペット:

public class EditNameDialog extends DialogFragment {


    public EditNameDialog() 
        {
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        LayoutInflater factory = LayoutInflater.from(getActivity());
        View textEntryView = factory.inflate(R.layout.fragment_dialog, null);

        this.setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Holo_Light_Dialog);

        return new AlertDialog.Builder(getActivity())                
        .setTitle("Skapa profil")
        .setView(textEntryView)
        .setNegativeButton(R.string.cancel,
                new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {

            }
        }
                )
                .setPositiveButton(R.string.ok,
                        new      DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) 
                    {

                    }
                }
                        ).create();
    }

また、レイアウトファイル「fragment_dialog.xml」は次のようになります。

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

<TextView
    android:id="@+id/error_dialog"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="top"
    android:padding="10dp"
    android:text="@string/error_connecting"
    android:textSize="20sp" />

</LinearLayout>

「textEntryView」にあるTextViewを編集したい。これを行うために私は試しました

tv = (TextView) textEntryView.findViewById(R.id.error_dialog); 

そして、メソッドを呼び出すと、次のようになります。

public void attemptLogin(View v) 
{
System.err.println(tv.getText());
}

それは私にNullpointerを与えます。textEntryViewビュー内にiderror_dialogが見つからない理由がわかりません。

ありがとう。

4

3 に答える 3

0

次のような変数 tv の宣言が表示されません。

TextView tv = (TextView) findViewById(R.id.error_dialog);  

宣言していない場合は、フレームワーク (Eclipse?) からヒントが得られるはずです。
それで、クラスの別の部分でそれを宣言しましたか?

于 2013-01-19T19:03:07.113 に答える
0

あなたの問題は見た目よりも少し複雑です。このようにすると、View-Object が正しいビューを保持しないため、ウィジェットへの参照が失われます。私は同じ問題を抱えていて、それを理解するのに時間がかかりました。

textViewView-reference を最新の状態に保ち、値の取得をライフサイクルの後半で呼び出されるメソッドにアウトソーシングすることで解決しましたonActivityCreated()

editText と Button を持つ例を投稿しました。

私の例:

public class EnterNumberFragment extends DialogFragment implements OnClickListener{

private EditText editText = null;
private Button acceptButton = null;
private View mContentView = null;

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflator= getActivity().getLayoutInflater();
    mContentView = inflator.inflate(R.layout.dialog_number, null);
    builder.setView(mContentView);

    return builder.create();
}

@Override
public void onActivityCreated(Bundle arg0) {
    super.onActivityCreated(arg0);
    acceptButton = (Button) mContentView.findViewById(R.id.accept_change);
    editText = (EditText) mContentView.findViewById(R.id.et_number);

    acceptButton.setOnClickListener(this);      
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.accept_change:
            String num = editText.getText().toString();

            SharedPreferences sPrefs = getActivity().getSharedPreferences("PanicPrefs",0);
            SharedPreferences.Editor prefEditor = sPrefs.edit();
            prefEditor.putString("NumberToCall", num).commit();
            dismiss();
            break;

         default:
            break;
    }
}
于 2013-10-11T11:32:29.143 に答える