将数组中的字符串从父活动传递到子活动

时间:2017-01-05 23:34:39

标签: java android

此代码只有2个按钮“Samsung”和“Apple”,它们启动了另一个列出一堆设备的活动。如何将相应的公司名称(例如三星)传递给儿童活动?我是否必须使数组全局化?我只知道如何通过这个职位

我知道如何在一个函数中传递它,但在这种情况下我有两个,一个设置自定义列表适配器,另一个只是一个onClick函数。这使用数组而不是独立的字符串,所以我不知道如何处理

MainActivity.java

package org.turntotech.navigatesample;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;


public class MainActivity extends ListActivity implements OnItemClickListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i("TurnToTech", "Project Name - NavigateSample");
        String[] data = { "Samsung", "Apple" };
        int[] icons = { R.drawable.samsung_logo, R.drawable.opo };

        // Provide the cursor for the list view. 
        setListAdapter(new CustomListAdapter(this, data, icons));

        /* setOnItemClickListener() Register a callback to be invoked when an item 
         * in this AdapterView has been clicked.
         */
        getListView().setOnItemClickListener(this);

    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        Intent intent = new Intent(parent.getContext(), ChildActivity.class);

        // Add extended data to the intent.
        intent.putExtra("POSITION", position);

        /*
         * Launch a new activity. You will not receive any information about when 
         * the activity exits. This implementation overrides the base version, 
         * providing information about the activity performing the launch.
         */
        startActivity(intent);
    }

}

ChildActivity.java

package org.turntotech.navigatesample;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;


public class ChildActivity extends ListActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        String[][] data = {
                { "Galaxy Tab", "Galaxy Smart Phones", "Galaxy Gear" },
                { "iPhone", "iPad", "iPod" } };
        int[][] icons = {
                { R.drawable.gala, R.drawable.duos, R.drawable.star },
                { R.drawable.a, R.drawable.b, R.drawable.c }, };
        Intent intent = getIntent();
        int position = intent.getIntExtra("POSITION", 0);

        // Provide the cursor for the list view. 
        setListAdapter(new CustomListAdapter(this, data[position],
                icons[position]));

    }

}

3 个答案:

答案 0 :(得分:1)

您只需使用putExtra(java.lang.String, java.lang.String)传递字符串,然后使用getStringExtra(java.lang.String)

进行检索

如果数组是静态的,你可以declare it in XML并传递位置

修改:添加了示例

examples.xml:

示例
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="brands">
        <item>Samsung</item>
        <item>Apple</item>
    </string-array>

    <string-array name="apple_models">
        <item>iPhone</item>
        <item>iPad</item>
        <item>iPod</item>
    </string-array>

    <string-array name="samsung_models">
        <item>Galaxy Tab</item>
        <item>Galaxy Smart Phones</item>
        <item>Galaxy Gear</item>
    </string-array>
</resources>

然后使用:

进行检索
Intent intent = getIntent();
int position = intent.getIntExtra("POSITION", 0);

String[] brandArray = getResources().getStringArray(R.array.brands);
String brandName = brandArray[position];

答案 1 :(得分:0)

示例1:

您可以将会话ID传递给您在启动活动时使用的意图中的注销父活动。

Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent)

访问子活动中的意图。

String str = getIntent().getStringExtra("EXTRA_SESSION_ID");

示例2:

在您当前的活动中,创建一个新的意图:

Intent intent = new Intent(getApplicationContext(), NewActivity.class);
intent.putExtra("key","value");
startActivity(intent);

然后在新的Activity中,检索这些值:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    String value = extras.getString("key");
}

使用此技术将变量从一个Activity传递到另一个Activity。

答案 2 :(得分:0)

您实际上不需要具有通用的ChildActivity类。我认为最简单的方法是进行两项活动。 SamsungChildActivity和AppleChildActivity。两者都可以膨胀相同的布局,但内容将特定于一个或另一个。您还应该将资源放在资源文件夹中,就像数据数组一样(查看字符串数组资源)。在MainActivity中,只需查看您要启动的活动,然后为SamsungChildActivity或AppleChildActivity创建意图。