簡體   English   中英

Android App:無法將方法從另一個類傳遞到主類

[英]Android App: Cannot pass method from another class into the main class

大家好,我是Android ADK的新手。 我試圖將方法從單獨的SETUP類文件傳遞到主要類,即KakaMainActivity。 但是,只要應用程序通過模擬器運行,它就會立即崩潰。 請幫忙!

// KakaMainActivity Class

package com.example.kaka;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.Button;
import android.widget.TextView;

public class KakaMainActivity extends Activity {

    Button sendMSG1 = (Button)findViewById(R.id.button_Send1);
    Button sendMSG2 = (Button)findViewById(R.id.button_Send2);
    TextView RESULT = (TextView)findViewById(R.id.text_Result);

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

    SETUP clickAGAIN = new SETUP();
    clickAGAIN.click();
   }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.kaka_main, menu);
    return true;
   }

}

// SETUP類

package com.example.kaka;

import android.view.View;

public class SETUP extends KakaMainActivity {
    public void click(){
            sendMSG1.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v){
                        RESULT.setText("First message HELLO WORLD!");
            }
        });

        sendMSG2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v){
                RESULT.setText("Second message BYE BYE");
            }
        }); 
  }
}

幾個問題......

首先,您不應該像這樣實例化一個Activity

SETUP clickAGAIN = new SETUP();

如果SETUP僅用於保存onClick()那么您可以讓它implements OnClickListener而不擴展任何類。 請參閱此答案以獲取幫助

其次,在使用inflater誇大layout或調用setContentView()之前,不能嘗試實例化Views 所以將你的KakaMainActivity改為

Button sendMSG1; // you can declare them here
Button sendMSG2; 
TextView RESULT; 

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

    sendMSG1 = (Button)findViewById(R.id.button_Send1);  // but initialize them here
    sendMSG2 = (Button)findViewById(R.id.button_Send2);
    RESULT = (TextView)findViewById(R.id.text_Result);

此外,您應該將RESULT更改為result以符合Java標准(不是必需的,但是良好實踐)。 現在它看起來像一個constant

setContentView之后初始化您的視圖

private Button sendMSG1; 
private Button sendMSG2;
private TextView RESULT;

@Override
 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_kaka_main);
sendMSG1 = (Button)findViewById(R.id.button_Send1);
sendMSG2 = (Button)findViewById(R.id.button_Send2);
RESULT = (TextView)findViewById(R.id.text_Result);
sendMSG1.setOnClickListener(new OnClickListener() {
            @Override 
            public void onClick(View v){
                    RESULT.setText("First message HELLO WORLD!");
        }
    });
sendMSG2.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v){
            RESULT.setText("Second message BYE BYE");
        }
    });  
}

您還可以在此活動本身中添加單擊偵聽器

使用匿名內部類

  sendMSG1.setOnClickListener(new OnClickListener() {
            @Override 
            public void onClick(View v){
                    RESULT.setText("First message HELLO WORLD!");
        }
    });

你也有這個

SETUP clickAGAIN = new SETUP();
clickAGAIN.click();

然后

public class SETUP extends KakaMainActivity 

你實例化一個你不應該做的活動類.Activity有一個ui,由startActivtiy(new Intent(param))

您應該在設置布局后加載UI組件。

setContentView(R.layout.activity_kaka_main);
sendMSG1 = (Button)findViewById(R.id.button_Send1);
...
RESULT = (TextView)findViewById(R.id.text_Result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM