2016-08-15 1 views
1

私はAndroid開発とJavaにかなり興味があります。 私は、タッチスクリーン上で認識できるスタンプを生産する会社によって外部ライブラリを使用しています。Android機能を書き直してテキストを表示するのではなく、アクティビティを開始する

スタンプデータを開始して表示するアプリケーションが表示されますが、スタンプが入力されるとアプリケーションは新しいアクティビティを開始します。

以下MainView.ClassとStampActivity.Classを見つけてください:MAINVIEWクラスで

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 { 
    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); 
    } 
} 

StampActivity.Class

import android.app.Activity; 
import android.os.Bundle; 
import android.util.DisplayMetrics; 
import android.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); 
    } 

は機能onStampSuccess存在します。テキストを返す代わりに、新しい活動を開始したいと思います。 私はどんな助けにも感謝します。

答えて

0

は、あなたのsetText()メソッドに次の変更を適用します。現在の構造は、メモリリークへのアプリは非常に影響を受けやすくとして

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

「this」は静的コンテキストからは参照できません。 'startActivity'と同じです。 – Stefan

3

あなたは完全に静的メソッドを避ける必要があります!これはinterfacesを使用して実現できます。上記のインターフェイスを受け入れるようにMainViewを変更し、今

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

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); 
    } 

} 
+0

広範な回答をいただきありがとうございます。 私はそれを実装しようとしましたが、 'stampResult'がテキストを返すにもかかわらず、' mMainViewActivityInterface.stampSuccess(stampResult); '行に対してNULLポインタ例外を返します。 これを解決する方法はありますか? – Stefan

+0

@Stefan Ok .. 'MainView'で' initMainView'メソッドを定義し、mainView.initMainView(this);を呼び出していますか? ...これを 'mainView.init(metric);の前に呼んでください; – Shaishav

+0

あなたは賞賛されています! ありがとうございます。あなたの答えは完璧でした。私は 'initMainView'定義を見落としました。 – Stefan

関連する問題