0

多くの人が同様の問題に直面しており、stackoverflow のすべての投稿に記載されているすべての問題を追跡して修正したと思います。

  • レイアウトに ContentView を設定
  • dialog.findViewById で edittext を初期化する

しかし、私はまだ nullpointer で立ち往生しています。何が欠けていますか?

レイアウト名は serverchange.xml です。serverchange.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="fill_parent"
android:orientation="vertical" >

<EditText
    android:id="@+id/server"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:inputType="textUri" />

<TextView
    android:id="@+id/status"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:editable="true" />

</LinearLayout>

optionsmenu でメニューを選択すると、ダイアログが作成されます。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    case R.id.serverChange:
        showDialog(SERVER_CHANGE);
        // newGame();
        return true;
    }
}

NullPointerException を取得します

if (changeServerView == null) throw new NullPointerException() ;

コード:

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case SERVER_CHANGE:
        serverChangeDialog = new Dialog(this);
        serverChangeDialog.setContentView(R.layout.serverchange);
        serverChangeDialog.setTitle("Change Server");
        serverChangeDialog.setOnKeyListener(this);
        serverChangeDialog.show();
        changeServerView = (EditText) serverChangeDialog.findViewById(R.id.serverChange);
        status = (TextView) serverChangeDialog.findViewById(R.id.status);
        if (changeServerView == null) throw new NullPointerException() ;
    }
    return null;
}

私の onKey 実装

@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
    if (dialog == serverChangeDialog) {
        if (keyCode == KeyEvent.KEYCODE_ENTER) {
            String backupServer = server;
            server = changeServerView.getText().toString();

ここでも NullPointerException が発生します。

4

1 に答える 1

1

xml ファイルからの ID 参照が間違っています。

の代わりに使用server serverChange

changeServerView = (EditText) serverChangeDialog.findViewById(R.id.server);
                                                                   ^^^^^^  
于 2012-05-31T07:08:18.857 に答える