2015-10-18 88 views
-3

我創建了一個名爲Activity1的活動,我想在其佈局中有一個按鈕來啓動MainActivity。但是當我這樣做時,它說無法解析setOnClickListener。這裏是我的活動1:如何製作一個按鈕,打開另一個活動

package br.raphael.detector; 

import java.io.File; 
import java.io.IOException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 
import java.util.ListIterator; 
import java.util.Set; 

import org.opencv.android.OpenCVLoader; 
import org.opencv.android.Utils; 
import org.opencv.core.Core; 
import org.opencv.core.Mat; 
import org.opencv.core.Point; 
import org.opencv.core.Scalar; 
import org.opencv.imgproc.Imgproc; 

import android.R.integer; 
import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.Bitmap.Config; 
import android.graphics.BitmapFactory; 
import android.graphics.BitmapFactory.Options; 
import android.hardware.Camera.Size; 
import android.os.Bundle; 
import android.os.Environment; 
import android.os.Handler; 
import android.os.Message; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.MotionEvent; 
import android.view.SubMenu; 
import android.view.SurfaceView; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.View.OnTouchListener; 
import android.view.WindowManager; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.Button; 
import android.widget.LinearLayout; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 
import br.raphael.extended.AdapterTwoLinesImage; 
import br.raphael.extended.ViewExtended; 
import br.raphael.extended.CameraBridgeViewBaseExtended.CvCameraViewFrame; 
import br.raphael.extended.CameraBridgeViewBaseExtended.CvCameraViewListener2; 


public class MainActivity extends Activity implements CvCameraViewListener2, OnTouchListener, OnClickListener, OnItemClickListener { 


    //Variaveis Basicas - Basic Variables 
    private static final String TAG = "Main Activity: "; 
    private ViewExtended CameraView; 
    private Handler mainHandler; 
    //Loading para FullDetection 
    private LinearLayout Loading; 
    //Botoes - Buttons 
    private Button FullDetection; 
    private Button CleanList; 
    //Menu de Opcoes - Options Menu 
    private List<Size> mResolutionList; 
    private MenuItem[] mEffectMenuItems; 
    private SubMenu mColorEffectsMenu; 
    private MenuItem[] mResolutionMenuItems; 
    private SubMenu mResolutionMenu; 
    private SubMenu Mode; 
    private MenuItem[] ModeItens; 
    private SubMenu Debug; 
    private MenuItem[] DebugItens; 
    //Personagens(Pre-Carregamento) - Characters(Pre-Load) 
    private SimpsonDetector previousDetector; 
    private Mat homer; 
    private Mat homer2; 
    private Mat marge; 
    private List<Mat> preLoadedImages; 
    private boolean[] DetectedChars; 
    //Controle de Thread 
    private boolean[] threadControl; 
    //Outros 
    //Others 
    private TextView Status; 
    private String ModeValue; 
    private int teste1 = 1, teste2 = 1; 
    private boolean debug; 
    //Lista de Objetos 
    //Object List 
    private ListView DetectedObj; 
    private List<String> Objetos; 
    private ArrayList<ObjectList> personal; 
    private boolean[] objControl; 



    public MainActivity() { 
     Log.i(TAG, "Instantiated new " + this.getClass()); 
    } 

    /** 
    * Chamado quando a Activity criada. 
    * Called when activity is created 
    * */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     Log.i(TAG, "called onCreate"); 
     super.onCreate(savedInstanceState); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

     setContentView(R.layout.activity_main); 

     CameraView = (ViewExtended) findViewById(R.id.ExtendedSurfaceView); 

     CameraView.setVisibility(SurfaceView.VISIBLE); 

     CameraView.setCvCameraViewListener(this); 

     Loading = (LinearLayout) findViewById(R.id.Loading); 
     Loading.setVisibility(View.GONE); 

     Status = (TextView) findViewById(R.id.text_status); 
     Status.setOnClickListener(this); 

     FullDetection = (Button) findViewById(R.id.fullDetection); 
     FullDetection.setOnClickListener(this); 

     CleanList = (Button) findViewById(R.id.CleanList); 
     CleanList.setOnClickListener(this); 

     DetectedObj = (ListView) findViewById(R.id.DetectedObjects); 
     DetectedObj.setOnItemClickListener(this); 
     personal = new ArrayList<ObjectList>(); 
     objControl = new boolean[30]; 

     debug = false; 

而且AndroidManifest:

package br.raphael.detector; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.Button; 

public class Activity1 extends Activity { 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_1); 
    } 

    Button Bdetectar = (Button) findViewById(R.id.buttondetectar); 
    Bdetectar.setOnClickListener(new OnClickListener(){ 

     public void onClick(View v){ 

      Intent intent = new Intent (v.getContext(), MainActivity.class); 
      startActivityForResult(intent, 0); 
     } 
    }); 

} 

在MainActivity的beggining

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="br.raphael.detector" 
    android:versionCode="1" 
    android:versionName="0.1" > 

    <uses-sdk 
     android:minSdkVersion="15" 
     android:targetSdkVersion="21" /> 

    <uses-permission android:name="android.permission.CAMERA" /> 

    <uses-feature 
     android:name="android.hardware.camera" 
     android:required="false" /> 
    <uses-feature 
     android:name="android.hardware.camera.autofocus" 
     android:required="false" /> 
    <uses-feature 
     android:name="android.hardware.camera.front" 
     android:required="false" /> 
    <uses-feature 
     android:name="android.hardware.camera.front.autofocus" 
     android:required="false" /> 

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <android:uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <android:uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

    <application 
     android:allowBackup="true" 
     android:hardwareAccelerated="true" 
     android:icon="@drawable/ic_donuts" 
     android:label="@string/app_name" 
     android:largeHeap="true" 
     android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > 
     <activity 
      android:name=".Activity1" 
      android:label="@string/title_activity_1" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="landscape" > 
     </activity> 
    </application> 

</manifest> 

回答

2

你太早關閉了onCreate(),所以你超出了函數的範圍。
將按鈕聲明和setOnClickListener移動到onCreate(),它將工作。

package br.raphael.detector; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.Button; 

public class Activity1 extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_1); 

     Button Bdetectar = (Button) findViewById(R.id.buttondetectar); 
     Bdetectar.setOnClickListener(new OnClickListener() { 
      public void onClick(View v){ 

       Intent intent = new Intent (v.getContext(), MainActivity.class); 
       startActivityForResult(intent, 0); 
      } 
     }); 
    } 
} 
+0

感謝您的答案,它的工作原理。 –

0

相反setOnClickListener在按鈕的XML設置:

android:onClick="onClick" 

,如:

<Button android:id="@+id/mybutton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Click me!" 
     android:onClick="onClick" /> 

現在,你可以簡單地使用public void onClick(View v)在你的活動沒有監聽器。

+0

感謝您的回答,我試過了,它也奏效了。 –

相關問題