如何将两个值传递给另一个片段?

时间:2016-05-13 12:48:57

标签: android android-intent

如何将两个值传递给另一个片段。我传递了一个参数(log)。现在我想添加另一个参数" id"。

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Intent intent = new Intent(getActivity().getApplicationContext(), ViewMyCommande.class);
        HashMap<String, String> map = (HashMap) parent.getItemAtPosition(position);
        String tid = map.get("log").toString();
        intent.putExtra("log", tid);
        startActivity(intent);
    }

我正在检索它的值:

String log = getArguments().getString("log");

4 个答案:

答案 0 :(得分:2)

U可以以与发送/检索第一个参数

类似的方式发送一个参数
intent.putExtra("keyName", "somevalue");
getStringExtra(String keyName)

或者您可以使用所有值组合一个对象并与意图一起发送。

i.putExtra((Parcelable) myParcelableObject);
or
i.putExtra((Serializable) myParcelableObject);

答案 1 :(得分:0)

我们在谈论片段或活动吗?

如果您想将数据传递给其他活动,您必须使用像您这样的意图并使用

intent.putExtra("key", data);

您将传递的每个数据

如果你想将数据传递给片段,你可以在片段类中使用新实例

public static MyFragment newInstance() {

    Bundle args = new Bundle();

    MyFragment fragment = new MyFragment();
    args.putParcelable("key",data);
    fragment.setArguments(args);
    return fragment;
}

您必须将您的对象声明为parcelable

我希望这会对你有所帮助

答案 2 :(得分:0)

在片段主要活动中创建变量  喜欢

String message;

假设消息值为&#34; frag&#34 ;; 并从此活动的任何片段中使用它 喜欢

if(fragment_main_activity_name.message.equals("frag"))
    {

    }

享受快乐编码:)如果它有用,请将其设为正确:)

答案 3 :(得分:0)

你可以这样做。

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Intent intent = new Intent(getActivity().getApplicationContext(), ViewMyCommande.class);
    HashMap<String, String> map = (HashMap) parent.getItemAtPosition(position);
    String key = "log";
    intent.putExtra("key", key);
    intent.putExtra("value", map.get(key))
    startActivity(intent);
}

PS:在您的代码中,您有一个类似String tid = map.get("log").toString();的行,因为您的地图已经是<String, String>地图,因此无需在其中调用Object::toString。只需致电String tid = map.get("log")即可获得 String

另一个建议是将您正在使用的 "log"设置为常量,而不是从已购买的活动中访问它。您可以将这样的字段添加到活动类 private static final String MAP_KEY = "log";中,而不是在代码中使用它,因此在上面的代码中,您可以删除String key = "log";行并替换你的常量key,所以两条意图线看起来像这样:

intent.putExtra("key", MAP_KEY);
intent.putExtra("value", map.get(MAP_KEY))

另一个建议是将您在putExtras中使用的密钥作为公共常量提取,然后在您接收数据的Activity中使用这些密钥。像这样:

public static String KEY = "key";
public static String VALUE = "value";

然后在意图行中使用它。

intent.putExtra(KEY, MAP_KEY);
intent.putExtra(VALUE, map.get(MAP_KEY))

当您在 SecondActivity 中时,您可以将getArguments().getString(FirstActivity.KEY);这些值与值相同。

另一个观察结果是,如果您的密钥不变,则您不需要将密钥发送到 SecondActivity

如果您在 SecondActivity 中需要所有这些地图,则可以致电putExtra并将地图放入其中。然后在 SecondActivity 中,您需要调用HashMap<String, String> firstActivityMap = (HashMap<String, String>) getSerializable(MAP)

OBS:也许它有点令人困惑,我希望社区可以帮助改善这个答案