0

のコードは次のとおりですmain activity classmain.xmlボタンを含むコンテンツを に設定しますbtn。このボタンをクリックするとpic.xml、2 つのボタンがある とbtn1にコンテンツが設定されますbtn2。をクリックするbtn1と、コンテンツが元に戻るはずですmain.xmlが、これは行われていません。

package com.asin.amit;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;



import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.PixelFormat;


import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.VideoView;

public class AsinActivity extends Activity {
/** Called when the activity is first created. */
private TextView tv ;
private VideoView myVideoView;
private Button btn;
private Button btn1;
private Button btn2;


@Override


public void onCreate(Bundle savedInstanceState) {


    try {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn = (Button) findViewById(R.id.b);
        btn1 = (Button) findViewById(R.id.button1);
        btn2 = (Button) findViewById(R.id.button2);

        String str= "/sdcard/DCIM/a.mp4";


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


        myVideoView = (VideoView)findViewById(R.id.myvideoview);
        myVideoView.setVideoPath(str);
        myVideoView.setMediaController(new MediaController(this));
        myVideoView.requestFocus();
        myVideoView.start();


        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                myVideoView.pause();                         
                setContentView(R.layout.pic);
            }                                   
        });

        btn1.setOnClickListener(new ButtonListener());


    } 
    catch (Exception e) {
        // handle any errors
        Log.e("HelloWorld", "1", e);  // log the error
        // Also let the user know something went wrong
        Toast.makeText(
                getApplicationContext(),
                e.getClass().getName() + " " + e.getMessage(),
                Toast.LENGTH_LONG).show();
    }
}

class ButtonListener implements View.OnClickListener{
    @Override
    public void onClick(View v) {

        setContentView(R.layout.main);
    }
}
}

btn1.setOnClickListener(new ButtonListener()); で、logcatは言っていますjava.lang.NullPointerException

私は何を間違っていますか?

4

2 に答える 2

0

setContentView()アクティビティで複数回使用することは (ほとんど?) 常に悪い、悪い考えです。main.xmlのレイアウトから R.id.button1 の ID を持つボタンを選択し、onCreate()そのボタンにリスナーを設定しています。setContentView(R.layout.pic)その後、そのボタンを呼び出すと、無効になります。btn = (Button)findViewById(R.id.button1)コンテンツビューを設定した後、もう一度言わなければならないでしょう。壊れる可能性が非常に高いため、これは単なる悪い設計です。pic.xmlボタンをクリックしたときにコンテンツビューとして新しいアクティビティを起動できない理由はありますか?

于 2012-06-12T21:38:22.947 に答える
0

あなたが書いたことによると、When this button is clicked, content is set to pic.xml, which has two buttons, btn1 and btn2あなたの btn1 と btn2 は R.layout.pic にありますが、 R.layout.mainレイアウトでそれらを見つけようとしています

btn1 = (Button) findViewById(R.id.button1);

btn2 = (Button) findViewById(R.id.button2);

btn1 および btn2 変数 (およびもちろん onClickListener も) に値を設定する必要があるのは、 の後setContentView(R.layout.pic)でのみです。これにより、レイアウトにこれらのボタンが含まれるようになります。

于 2012-06-12T21:31:03.120 に答える