2011-07-04 9 views
1

異なるクラスにint型を使用してアンドロイドは - ..私はこのint型のMASKを持って

public class Canvastutorial extends Activity { 

/** Called when the activity is first created. */ 

    public int MASK=R.drawable.face00; 

     public void setMask(int value) 
    { 
     MASK=value; 
    } 

、その値は、私は他でこのint型MASKを使用したい

public void onClick(DialogInterface dialog, int item) 
      { 
       if(items[item]=="Mask 1") 
       { 
        setMask(R.drawable.face00); 
       } 
       else if(items[item]=="Mask 2") 
       { 
        setMask(R.drawable.face01); 
       } 
       else if(items[item]=="Mask 3") 
       { 
        setMask(R.drawable.face02); 
       } 
       else if(items[item]=="Mask 4") 
       { 
        setMask(R.drawable.face03); 
       } 
       else if(items[item]=="Mask 5") 
       { 
        setMask(R.drawable.face04); 
       } 

と同じクラスCanvastutorialに変更されましたクラス

public class Panel extends SurfaceView implements SurfaceHolder.Callback{ 

私はこれまでのところ、私は Canvastutorial.ct = nとMASKを呼び出そうとしました。..そうすることができませんew Canvastutorial(); 、次にct.MASKを使用します。

しかし、これはアプリケーションを強制終了しました..

どのようにすればいいですか?

+0

強制終了している場合は、logcatを投稿してください。 – Egor

答えて

1

静的なintメソッドと静的メソッドを使用する方法もあります。これらは、Canvastutorial.MASKとCanvastutorial.setMask(...)を使用してどこからでもアクセスできます。恐らく最もクリーンなアプローチではないかもしれませんが、うまくいくでしょう。

コードをそのまま使用しても構いませんが、そのクラスの静的インスタンスを作成し、新しいクラスを作成する代わりにCanvastutorial.getInstance()を使用してアクセスできます。

0

もう1つの方法は、ApplicationContext()(基本的にグローバルコンテキスト)を使用することです。
あなたがマニフェストにこのようなアプリケーションのコンテキストクラスを宣言します。

<application 
    android:name=".model.AppModel"> 
</application> 

次に、カスタムがそうのようなオブジェクトのApplicationContextにするために、アプリケーションのクラスから拡張:

public class AppModel extends Application { 
    private User user; 

public void setUser(User user) { 
    this.user = user; 
} 
public User getUser() { 
    return user; 
} 

そして、あなたがアクセスする必要があるときあなたはこれに反対します:

AppModel appModel = ((AppModel) getApplicationContext()); 
appModel.setUser(user); 

どこでもあなたのappModelにアクセスできます。