2013-10-29 15 views
8

'đang phát triển Ứng dụng Android trong đó tôi cócách gọi phương thức trong Hoạt động khác từ Hoạt động

Tôi có hai lớp A và Lớp B.

Trong lớp A, tôi đã thử Đoạn mã như sau,

cách gọi phương thức trong Hoạt động khác từ Hoạt động.

public class FirstActivity extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main2); 
    }  

    public void method() { 
     // some code 
    } 
} 

public class SecondActivity extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main2); 

     FirstActivity fact = new FIrstActivity(); 

     fact.method(); 
    } 
} 
+0

Bạn chắc chắn cần phải đọc điều này - http://developer.android.com/guide/components/fundamentals.html – Varun

Trả lời

8

Bạn không được tạo phiên bản của lớp hoạt động. Điều đó là sai. Hoạt động có ui và vòng đời và hoạt động được bắt đầu bằng startActivity(intent)

Bạn có thể sử dụng startActivityForResult hoặc bạn có thể chuyển giá trị từ hoạt động này sang hoạt động khác bằng cách sử dụng ý định và làm những gì được yêu cầu. Nhưng nó phụ thuộc vào những gì bạn định làm trong phương pháp.

+2

để cách gọi phương thức tạo thành một hoạt động khác. – user2932841

+0

@ user2932841 bạn có thể không phải là những gì mà bạn đang cố gắng làm trong phương pháp đó? – Raghunandan

+0

@ user2932841 bạn dường như đã hỏi lại câu hỏi này. có vẻ như một bản sao. Nhưng bạn vẫn muốn làm gì trong phương pháp bạn có thể xác định điều đó? – Raghunandan

2

Nếu bạn cần gọi cùng một phương thức từ cả hai Hoạt động, tại sao không sử dụng đối tượng thứ ba?

public class FirstActivity extends Activity 
{ 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main2); 

    }  

    // Utility.method() used somewhere in FirstActivity 
} 

public class Utility { 

    public static void method() 
    { 

    } 

} 

public class SecondActivity extends Activity 
{ 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main2); 

     Utility.method(); 

    } 
} 

Tất nhiên làm cho nó tĩnh phụ thuộc vào trường hợp sử dụng.

4

Các mô hình startActivityForResult là tốt hơn phù hợp cho những gì bạn đang cố gắng để đạt được: http://developer.android.com/reference/android/app/Activity.html#StartingActivities

Hãy thử mã dưới đây

public class MainActivity extends Activity { 

    Button button1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     textView1=(TextView)findViewById(R.id.textView1); 
     button1=(Button)findViewById(R.id.button1); 
     button1.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       Intent intent=new Intent(MainActivity.this,SecondActivity.class); 
       startActivityForResult(intent, 2);// Activity is started with requestCode 2 
      } 
     }); 
    } 
// Call Back method to get the Message form other Activity 
    @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) 
     { 
       super.onActivityResult(requestCode, resultCode, data); 
        // check if the request code is same as what is passed here it is 2 
        if(requestCode==2) 
         { 
          //do the things u wanted 
         } 
    } 

} 

SecondActivity.class

public class SecondActivity extends Activity { 

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

      button1=(Button)findViewById(R.id.button1); 
      button1.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View arg0) { 
        String message="hello "; 
        Intent intent=new Intent(); 
        intent.putExtra("MESSAGE",message); 
        setResult(2,intent); 
        finish();//finishing activity 
       } 
      }); 
    } 

} 

Hãy cho tôi biết nếu nó đã giúp ...

-1

Tuyên bố một SecondActivity biến trong FirstActivity

Như thế này

public class FirstActivity extends Activity { 

SecondActivity secactivity; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main2); 
    }  

    public void method() { 
    // some code 

    secactivity.call_method();// 'Method' is Name of the any one method in SecondActivity 

    } 
} 

Sử dụng định dạng này bạn có thể gọi bất kỳ phương pháp từ một hoạt động khác.

+0

Vui lòng cập nhật câu trả lời này, giải pháp này không chính xác, bạn nên luôn luôn instanciate đối tượng SecondActivity và sẽ không hoạt động! – Rodrigo

Các vấn đề liên quan