【问题标题】:Using intents to pass data between activities使用意图在活动之间传递数据
【发布时间】:2013-10-10 04:16:14
【问题描述】:

我正在尝试在活动之间传递数据

我使用意图在常规活动之间传递数据

考虑下面的代码::

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

    }

}

假设我将来自名为Activity-1 的其他活动的数据作为意图发送到AndroidTabRestaurantDescSearchListView

现在我如何才能接收从Activity-1 获得的AndroidTabRestaurantDescSearchListView 中的数据,然后再次将其传递给RatingDescriptionSearchActivity

图形表示是 ::

{EDIT} -- 如果这可能基于答案 --- 歧义,因为 AndroidTabRestaurantDescSearchListView 是一个选项卡活动

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

【问题讨论】:

标签: android android-intent


【解决方案1】:

将数据从Activity-1 传递到AndroidTabRes..,如下所示:

在发送活动时...

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

AndroidTabRes..活动...

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

因此,您可以在从发送活动接收活动时获得数据...

在你的 AndroidTabRestaurantDescSearchListView 课堂上,这样做:

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

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

然后在您的 RatingDescriptionSearchActivity 班级中,执行以下操作:

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

【讨论】:

  • 请查看更新后的问题.....我的歧义在于其中一个是选项卡活动......我是否根据您的回答遵循正确的方法......看看编辑
  • 那你的问题是什么?
  • 在编辑中 .... 我是否提到过传递数据的正确方法 .... 因为在 tabactivity ... 我们从不使用 startActivity(--);所以......我很困惑!
  • 这没有任何区别,您可以传递并获取我所显示的数据。
  • 如果activity已经在运行了,还需要startActivity(i);吗?我的意思是,我可以让 activity A 调用 activity B,并将数据返回给 activity A 吗?我很困惑吗?
【解决方案2】:

在您的 AndroidTabRestaurantDescSearchListView 活动中尝试此操作

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

然后从RatingDescriptionSearchActivity活动中调用

getIntent().getStringExtra("key")

【讨论】:

  • 请看已编辑的问题....我的歧义是因为中间活动是选项卡活动
  • 答案还是一样,你必须从第一个活动发送IntentTabActivity,当你想触发第三个活动时,你必须执行答案设置。
【解决方案3】:

你可以使用Bundle来获取数据:

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

你可以再次将此数据传递给下一个活动:

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

【讨论】:

  • 如果activity已经在运行了,还需要startActivity(i);吗?我的意思是,我可以让 activity A 调用 activity B,并将数据返回给 activity A 吗?我很困惑吗?
  • 您可以使用StartActivityForResult 将结果从 B 中返回到 Activity A 完成时......
  • 太好了,接缝很有用!你知道StartActivityForResult 是否可以与AsynkTask 一起使用吗?
  • 是的..你也可以在AsynkTask 中使用它.. :) 很高兴看到它对你有用.. :)
【解决方案4】:

简单。

假设在您的 Activity-1 中,您这样做了:

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

在您的 AndroidTabRestaurantDescSearchListView 类中,执行以下操作:

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

然后在您的 RatingDescriptionSearchActivity 类中,执行以下操作:

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

【讨论】:

    【解决方案5】:

    主要活动

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

    第二个活动您要在其中接收数据

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

    【讨论】:

      【解决方案6】:

      在 FirstActivity 中:

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

      在 SecondActivity

      onCreate()

      String userName = getIntent().getStringExtra("USERNAME");
      String passWord = getIntent().getStringExtra("PASSWORD");
      

      【讨论】:

        【解决方案7】:

        我喜欢用这个干净的代码只传递一个值:

        startActivity(new Intent(context, YourActivity.class).putExtra("key","value"));
        

        这使得代码更易于编写和理解。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-05
          • 1970-01-01
          • 2013-12-02
          • 2021-04-12
          • 1970-01-01
          • 2017-07-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多