有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java重写Android函数以启动活动,而不是播放文本

就这一点而言,我对Android开发和Java相当陌生。 我正在使用一家公司的外部图书馆,该公司生产的邮票可以在触摸屏上识别

我让应用程序启动并显示戳记数据,但我希望应用程序在输入戳记后启动新活动

请找到主视图。类和StampActivity。类别如下:

主视图

import 安卓.content.Context;
import 安卓.content.Intent;
import 安卓.util.AttributeSet;
import com.onetwocm.stamp.service.sdk.StampBaseView;

@SuppressWarnings("deprecation")
public class MainView extends StampBaseView {
    public MainView(Context context) {
        super(context);
    }

    public MainView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MainView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public void onInitSuccess() {
        StampActivity.setText("onInitSuccess");
    }
    public void onInitError(String code, String message) {
        StampActivity.setText("onInitError - " + code + " " + message);
    }

    public void onStampSuccess(String stampResult) {
        StampActivity.setText("onStampSuccess - " + stampResult);
    }

    public void onStampError(String code, String message) {
        StampActivity.setText("onStampError - " + code + " " + message);
    }
}

雄蕊活动。阶级

import 安卓.app.Activity;
import 安卓.os.Bundle;
import 安卓.util.DisplayMetrics;
import 安卓.widget.TextView;

public class StampActivity extends Activity {
    MainView mainView = null;
    static TextView textView = null;

    public static final int KOREA = 0;
    public static final int TAIWAN = 1;
    public static final int JAPAN = 2;

    public static final int KOREAN = 0;
    public static final int ENGLISH = 1;
    public static final int CHINESE = 2;
    public static final int JAPANESE = 3;
    public static final int SPANISH = 4;

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

        mainView = (MainView)findViewById(R.id.mainView);
        textView = (TextView)findViewById(R.id.textView);

       // String APIKEY = "xxxxx";
        String APIKEY = "xxxxxx";       // Write you api key
        int REGION = KOREA;             // KOREA TAIWAN JAPAN
        int LANGUAGE = ENGLISH;         // KOREAN ENGLISH CHINESE JAPANESE SPANISH
        String INDEX = "B";         // Write index value received from 12cm

        // Display Initialization
        DisplayMetrics metric = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metric);
        mainView.init(metric);

        // Library Initialization for Stamp
        mainView.PlatformInit(APIKEY, REGION, LANGUAGE, INDEX);
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }

    public static void setText(String text) {
        textView.setText(text);
    }

在MainView类中存在函数onStampSuccess。我希望它开始一个新的活动,而不是返回文本。 如果有任何帮助,我将不胜感激


共 (2) 个答案

  1. # 1 楼答案

    你应该完全避免静态方法,因为当前的结构使你的应用程序极易发生内存泄漏!这可以通过interfaces实现。首先,在一个新类中,将接口方法定义为(以后可能会添加更多):

    public interface MainViewActivityInterface {
        public void stampSuccess(String text)
    }
    

    现在,修改MainView以接受上述接口:

    import android.content.Context;
    import android.content.Intent;
    import android.util.AttributeSet;
    import com.onetwocm.stamp.service.sdk.StampBaseView; 
    
    @SuppressWarnings("deprecation") 
    public class MainView extends StampBaseView { 
        private MainViewActivityInterface mMainViewActivityInterface
    
        ...
    
        // method to accept interface var, need to call from activity
        public void initMainView(MainViewActivityInterface mainViewActivityInterface) {
            mMainViewActivityInterface = mainViewActivityInterface;
        }
    
        // api success callback
        public void onStampSuccess(String stampResult) {
            // StampActivity.setText("onStampSuccess - " + stampResult);
            mMainViewActivityInterface.stampSuccess(stampResult);
    } 
    
        ...
    } 
    

    现在将StampActivity修改为:

    public class StampActivity extends Activity implements MainViewActivityInterface {
    
        @Override 
        protected void onCreate(Bundle savedInstanceState) {
            ...
            mainView.init(metric);
            mainView.initMainView(this); // this is where we are passing the current activity as interface
            ...
        } 
    
        @Override
        public void stampSuccess(String text) {
             // this is where interface callback happens, start new activity here
             // may do something with text here
             Intent intent = new Intent(this, NewActivity.class);
             startActivity(intent);
        }
    
    }
    
  2. # 2 楼答案

    setText()方法应用以下更改:

    public static void setText(String text) {
        textView.setText(text);
        if(text.startsWith("onStampSuccess"){
            Intent intent = new Intent(this, nextActivity.class);
            startActivity(intent);
    }