2011-07-08 25 views
2

実際には、別のアクティビティから1つのアクティビティの関数を呼び出したいと思っています。そのための単純なコードを記述しますが、動作していません。コード...あった場合activity1のための任意のミス..別のアクティビティから1つのアクティビティの関数を呼び出す方法

コード:activity2ため

public class Activity1 extends Activity2 
{ 
     public void onCreate(Bundle savedInstanceState) 
     { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.main2); 

       call(); 
     } 
     public void call() 
     { 
       showToast("Helloo"); 
     } 
} 

コード:一つだけの活動がACTIVされているので

public class Activity2 extends Activity 
{ 

     public void onCreate(Bundle savedInstanceState) 
     { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.main); 
     } 
     public void showToast(String s) 
     { 
       EditText t=(EditText)findViewById(R.id.editText1); 
       t.setText(s); 
     } 
} 
+0

上でそれを宣言すべき例外 – Egor

+0

公共ボイドshowToastのlogcatを投稿してください(文字列s)は { EditText t =(EditText)findViewById(R.id.editText1); t.setText(s); }上記のメソッドのコードを編集します。その署名を変更する。それにアクティビティ参照を渡します。そのアクティビティに対してfindviewByIdを呼び出し、メソッドが宣言されている現在のアクティビティを呼び出しません。 –

答えて

3

あなたの問題は、存在しないビューでfindViewByIdと呼んでいることです。

Activity1は、Activity2です。

あなたはR.layout.mainためsetContentView()を呼び出すActivity2onCreateを呼び出すActivity1super.onCreateを呼び出します。

私はあなたのテキストを推測していますR.id.editText1はメインレイアウトです。

への呼び出しからActivity1が返されると、すぐに内容のレイアウトがmain2にリセットされます。

編集しようとしている編集用のテキストボックスは存在しません。レイアウトがアクティブでないため、findViewByIdが見つかりません。したがって、クラッシュします。 R.id.editText2レイアウトmain2でエディットテキストボックスで

public class Activity1 extends Activity2 
{ 
     private EditText et; 
     public void onCreate(Bundle savedInstanceState) 
     { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.main2); 

       et = (EditText) findViewById(R.id.editText2); 
       call(); 
     } 
     public void call() 
     { 
       showToast("Helloo", et); 
     } 
} 

:それはこれを試して固定するために

。 Activity2で

:あなたはstaticとしてそれを置けば

public class Activity2 extends Activity 
{ 

     public void onCreate(Bundle savedInstanceState) 
     { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.main); 
     } 
     public void showToast(String s, EditText t) 
     { 
       t.setText(s); 
     } 
} 
+0

どうすればその問題を解決できますか – AndroidDev

+0

更新しました。編集をお試しください。 – DeeV

+0

または、R.layout.main2ではなくActivity1でR.layout.mainを使用します。それ以外の変更は必要ありません。それもうまくいくはずですが、私が思うようなコードには多くの混乱がもたらされています。 – DeeV

2

まず、これは悪い設計原理であります一度にe。メソッドを静的にすることができますし、それらを呼び出すことができますが、その時点では、ある種の一般的なutilクラス内にあるはずです。

1

最も簡単な方法はshowToast()メソッドをpublic staticと宣言することです。この方法では、Activity2のインスタンスを持たずに呼び出すことができます。

1

あなたがメインの活動

関連する問題