1

新しい活動を開こうとしています。私がそうすると、ヌルポインタ例外が発生します。次のコードが実行されるまで、すべてが機能します。

    Button RmTests =(Button)findViewById(R.id.btnRmTests);
    RmTests.setOnClickListener(AnsRmTest);

コードをよく見てみましょう。

public class DisplayTests extends ListActivity {
    private DbManagement mdbManager;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //mdbManager = new DbManagement(this);
        //mdbManager.open();
        Button RmTests =(Button)findViewById(R.id.btnRmTests);
        RmTests.setOnClickListener(AnsRmTest);

        //fillData();
    }
    private OnClickListener AnsRmTest = new OnClickListener(){

        @Override
        public void onClick(View v) {
            try{                
              System.out.println("fart");
            }
            catch(Exception ex){
              System.out.println(ex.toString());
            }
        }       
    };

ボタンの作成に到達したときにアクティビティが爆発する理由がわかりません。

ここにもXMLがあります

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

    <FrameLayout
        android:id="@+id/frameLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true" >

        <ListView
            android:id="@+id/listView1"
            android:layout_width="match_parent"
            android:layout_height="194dp" >
        </ListView>
    </FrameLayout>

    <Button
        android:id="@+id/btnNewExam"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:text="@string/strNewExam" />

    <Button
        android:id="@+id/btnRmExams"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/btnRmTests"
        android:layout_alignBottom="@+id/btnRmTests"
        android:layout_alignParentRight="true"
        android:text="@string/strRmExams" />

    <Button
        android:id="@+id/btnRmTests"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/btnNewExam"
        android:layout_alignBottom="@+id/btnNewExam"
        android:layout_toLeftOf="@+id/btnRmExams"
        android:text="@string/strRmTest" />

</RelativeLayout>

そうは言っても、私は次のコードです

setContentView(R.layout.moretime);

私がそれをしたとき、次のエラーが発生しました: java.lang.RuntimeException: Your content must have a ListView which id attribute is 'android.R.id.list'

ご覧のとおり、リスト ビューはありますが、listView1 という名前で、このエラー メッセージが表示される理由がわかりません。前もって感謝します。

4

6 に答える 6

0

最初にレイアウトのコンテンツをアクティビティに設定してから、ビューを初期化する必要があります。

   privae Button RmTests;
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylayout); // missing
    RmTests =(Button)findViewById(R.id.btnRmTests);
    RmTests.setOnClickListener(AnsRmTest);
    ... // rest of the code 
   }     

findViewById現在のビュー階層をアクティビティに設定できます。コンテンツをアクティビティに設定していないため、ボタンを初期化するとNullPointerException.

また

ListActivityには、画面中央にある 1 つの全画面リストで構成されるデフォルトのレイアウトがあります。ただし、必要に応じて、onCreate() の setContentView() で独自のビュー レイアウトを設定することにより、画面レイアウトをカスタマイズできます。これを行うには、独自のビューに ID "@android:id/list" (コード内の場合はリスト) を持つ ListView オブジェクトが含まれている必要があります。

あなたのxmlで置き換えます

 <ListView
        android:id="@+id/listView1"

 <ListView android:id="@android:id/list"

また、あなたは必要FrameLayoutですか?リストビューとボタンだけを相対的なレイアウトにしてみませんか。

http://developer.android.com/reference/android/app/ListActivity.html

編集:

以下コメントより

以下のようにできます

public class MainActivity extends ListActivity {
String s[] = {"A","B","C","D","E"};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, s);
    setListAdapter(adapter);

}
}

ListActivityには、画面中央にある 1 つの全画面リストで構成されるデフォルトのレイアウトがあります。ただし、必要に応じて、 onCreate() の setContentView() で独自のビュー レイアウトを設定することにより、画面レイアウトをカスタマイズできます

他のビューが必要な場合は、xml 拡張ListActivityでそれらを定義できます。その場合、id "@android:id/list" のリストビューが必要です。ボタンにリストとボタンを配置できるように。したがって、IDが "@android:id/list"のリストビューが必要です。

于 2013-07-22T05:05:55.673 に答える
0

私はあなたの中であなたonCreateが与えることを忘れているメソッド内の活動だと思いますsetContentView

onCreateUI コンポーネントを初期化する前に、メソッド内のアクティビティのビューを設定する必要があります

すなわちsetContentView(R.layout.yourxml)

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.yourxml);
    //mdbManager = new DbManagement(this);
    //mdbManager.open();
    Button RmTests =(Button)findViewById(R.id.btnRmTests);
    RmTests.setOnClickListener(AnsRmTest);
    //fillData();
}

追加情報

また、使用しているListActivtyため、リストビューIDを次のように指定する必要があります

<ListView android:id="@android:id/list"
          android:layout_width="match_parent"
          android:layout_height="194dp" />

そうしないと、別のエラーが発生します

于 2013-07-22T05:06:10.100 に答える
0

どの xml をロードする必要があるかをアクティビティにどこで伝えますか?

試す:

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //mdbManager = new DbManagement(this);
    //mdbManager.open();
    Button RmTests =(Button)findViewById(R.id.btnRmTests);
    RmTests.setOnClickListener(AnsRmTest);

    //fillData();
}

「R.layout.main」を xml ファイルのタイトルに置き換えます。たとえば、Main_Layout.xml の場合は、「R.layout.Main_Layout」に置き換えます。

于 2013-07-22T05:08:31.337 に答える
0

書く

setContentView(R.layout.your_layout);

super.onCreate(savedInstanceState);

于 2013-07-22T05:08:59.353 に答える
0

setContentView(R.layout.your_layout_name);に追加してみてくださいsuper.onCreate(savedInstanceState);

于 2013-07-22T05:09:37.340 に答える
0

setContentView を設定する必要があります。コードは次のとおりです

protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_name);
Button RmTests =(Button)findViewById(R.id.btnRmTests);
    RmTests.setOnClickListener(AnsRmTest);

        }
于 2013-07-22T05:10:47.090 に答える