2013-10-10 17 views
26

Tôi cố gắng để vượt qua các dữ liệu giữa các hoạt độngSử dụng các ý định đến truyền dữ liệu giữa các hoạt động

tôi sử dụng các ý định đến truyền dữ liệu giữa các hoạt động thường xuyên

xem xét các mã dưới đây ::

AndroidTabRestaurantDescSearchListView.java

public class AndroidTabRestaurantDescSearchListView extends TabActivity { 

    // TabSpec Names 
    private static final String INBOX_SPEC = "Rating"; 
    private static final String OUTBOX_SPEC = "Price"; 

    Button Photos; 
    Button Filter; 
    Button Search; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     TabHost tabHost = getTabHost(); 

     // Inbox Tab 
     TabSpec inboxSpec = tabHost.newTabSpec(INBOX_SPEC); 
     Intent inboxIntent = new Intent(this, RatingDescriptionSearchActivity.class); 
     inboxSpec.setIndicator(INBOX_SPEC); 
     // Tab Content 
     inboxSpec.setContent(inboxIntent); 

     // Outbox Tab 
     TabSpec PriceSpec = tabHost.newTabSpec(OUTBOX_SPEC); 
     Intent PriceIntent = new Intent(this, PriceDescriptionSearchActivity.class); 
     PriceSpec .setIndicator(OUTBOX_SPEC); 
     PriceSpec.setContent(PriceIntent); 


     // Adding all TabSpec to TabHost 
     tabHost.addTab(inboxSpec); 
     tabHost.addTab(PriceSpec); 

     //Set the current value tab to default first tab 
     tabHost.setCurrentTab(0); 

    } 

} 

Giả sử tôi gửi dữ liệu từ Someother hoạt động gọi là Activity-1 để AndroidTabRestaurantDescSearchListView như ý đồ

Bây giờ thế nào tôi có thể nhận được dữ liệu trong AndroidTabRestaurantDescSearchListView mà tôi đã nhận từ Activity-1 và sau đó lại vượt qua nó vào RatingDescriptionSearchActivity

đại diện Pictoral là ::

enter image description here

{EDIT} - Nếu điều này có thể dựa trên câu trả lời --- Sự mơ hồ vì AndroidTabRestaurantDescSearchListView là một hoạt động tab

TabSpec inboxSpec = tabHost.newTabSpec(INBOX_SPEC); 
     Intent inboxIntent = new Intent(this, RatingDescriptionActivity.class); 
     intent.putExtra("keyName", value); 
     inboxSpec.setIndicator(INBOX_SPEC); 
     // Tab Content 
     inboxSpec.setContent(inboxIntent); 
+0

thấy điều này sẽ giúp bạn http://stackoverflow.com/questions/18649728/android-cannot-pass-intent-extras-though-alarmmanager/18649849#18649849 –

Trả lời

58

Chuyển dữ liệu từ Activity-1-AndroidTabRes.. như sau:

Tại gửi hoạt động ...

Intent intent = new Intent(current.this, AndroidTabRestaurantDescSearchListView.class); 
intent.putExtra("keyName","value"); 
startActivity(intent); 

Tại AndroidTabRes.. hoạt động ...

String data = getIntent().getExtras().getString("keyName"); 

Vì vậy bạn có thể có dữ liệu ở nhận hoạt động từ gửi hoạt động ...

Và trong lớp AndroidTabRestaurantDescSearchListView của bạn, làm điều này:

String value= getIntent().getStringExtra("keyName"); 

Intent intent = new Intent(this, RatingDescriptionSearchActivity.class); 
intent.putExtra("keyName", value); 
startActivity(intent); 

Sau đó, trong lớp RatingDescriptionSearchActivity của bạn, làm điều này:

String data= getIntent().getStringExtra("keyName"); 
+0

Hãy nhìn vào câu hỏi được cập nhật ... .. ambuiguity của tôi nằm bởi vì một trong số họ là hoạt động tab ....... Am i sau đúng cách dựa trên câu trả lời của bạn .. xem tại chỉnh sửa – Devrath

+0

Sau đó, vấn đề của bạn là gì? – GrIsHu

+0

Trong chỉnh sửa .... Tôi đã đề cập cách thích hợp để truyền dữ liệu .... bởi vì trong tabactivity ... chúng tôi không bao giờ sử dụng startActivity (-); vì vậy ... tôi đang bối rối! – Devrath

3

Đơn giản.

Giả sử rằng trong Activity-1 của bạn, bạn đã làm điều này:

String stringExtra = "Some string you want to pass"; 

Intent intent = new Intent(this, AndroidTabRestaurantDescSearchListView.class); 

//include the string in your intent 
intent.putExtra("string", stringExtra); 

startActivity(intent); 

Và trong lớp AndroidTabRestaurantDescSearchListView của bạn, làm điều này:

//fetch the string from the intent 
String extraFromAct1 = getIntent().getStringExtra("string"); 

Intent intent = new Intent(this, RatingDescriptionSearchActivity.class); 

//attach same string and send it with the intent 
intent.putExtra("string", extraFromAct1); 
startActivity(intent); 

Sau đó, trong lớp RatingDescriptionSearchActivity của bạn, làm điều này:

String extraFromAct1 = getIntent().getStringExtra("string"); 
7

Hãy thử điều này từ hoạt động AndroidTabRestaurantDescSearchListView bạn

Intent intent = new Intent(this,RatingDescriptionSearchActivity.class); 
intent.putExtras(getIntent().getExtras()); 
startActivity(intent); 

Và sau đó từ hoạt động RatingDescriptionSearchActivity chỉ cần gọi

getIntent().getStringExtra("key") 
+0

hãy nhìn vào câu hỏi đã chỉnh sửa .... sự mơ hồ của tôi là vì hoạt động ở giữa là hoạt động của tab – Devrath

+1

Câu trả lời vẫn như cũ, bạn phải gửi 'Intent' từ hoạt động đầu tiên tới' TabActivity' và khi bạn muốn kích hoạt hoạt động bạn phải thực hiện thiết lập câu trả lời. – xhamr

4

Bạn có thể sử dụng Bundle để lấy dữ liệu:

Bundle extras = intent.getExtras(); 
String data = extras.getString("data"); // use your key 

Và một lần nữa, bạn có thể opass dữ liệu này để hoạt động tiếp theo:

Intent intent = new Intent(this, next_Activity.class); 
    intent.putExtra("data", data); 
    startActivity(intent); 
+0

nếu hoạt động đang chạy, có cần phải thực hiện 'startActivity (i);'? Ý tôi là, tôi có thể thực hiện * hoạt động A * gọi * hoạt động B * và trả về dữ liệu cho * hoạt động A * không? Tôi có nhầm lẫn không? –

+1

Bạn có thể sử dụng 'StartActivityForResult' để lấy lại kết quả cho Hoạt động A từ B khi nó kết thúc .... –

+0

Tuyệt vời, các đường nối hữu ích! Bạn có biết nếu 'StartActivityForResult' có thể được sử dụng với' AsynkTask' không? –

2

Hoạt động chính

public class MainActivity extends Activity { 

    EditText user, password; 
    Button login; 

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

     user = (EditText) findViewById(R.id.username_edit); 
     password = (EditText) findViewById(R.id.edit_password); 
     login = (Button) findViewById(R.id.btnSubmit); 
     login.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(MainActivity.this,Second.class); 

       String uservalue = user.getText().toString(); 
       String name_value = password.getText().toString(); 
       String password_value = password.getText().toString(); 

       intent.putExtra("username", uservalue); 
       intent.putExtra("password", password_value); 
       startActivity(intent); 
      } 
     }); 
    } 
} 

Thứ hai Hoạt động mà bạn muốn nhận dữ liệu

public class Second extends Activity{ 

    EditText name, pass; 
    @Override 

    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.second_activity); 

     name = (EditText) findViewById(R.id.editText1); 
     pass = (EditText) findViewById(R.id.editText2); 

     String value = getIntent().getStringExtra("username"); 
     String pass_val = getIntent().getStringExtra("password"); 
     name.setText(value); 
     pass.setText(pass_val); 
    } 
} 
1

Trong FirstActivity:

Intent sendDataToSecondActivity = new Intent(FirstActivity.this, SecondActivity.class); 
sendDataToSecondActivity.putExtra("USERNAME",userNameEditText.getText().toString()); 
sendDataToSecondActivity.putExtra("PASSWORD",passwordEditText.getText().toString()); 
startActivity(sendDataToSecondActivity); 

Trong SecondActivity

Trong onCreate()

String userName = getIntent().getStringExtra("USERNAME"); 
String passWord = getIntent().getStringExtra("PASSWORD"); 
Các vấn đề liên quan