gpt4 book ai didi

android - 每个列表项 Android 的不同 Intent

转载 作者:行者123 更新时间:2023-11-30 00:41:52 24 4
gpt4 key购买 nike

我正在尝试为 Coins.java 中的每个列表项提供 Intents。当我添加 Intent 时,它会将我带到同一页面。我在 StackOverflow 上搜索可能的答案。许多答案说使用 switch 语句来给出不同的 Intent 。但是,在我的应用程序中,列表中的项目数不是常量。它可能是 10 或 5 甚至 100。我在 StackOverflow 上搜索了答案,但我能找到任何适合我的应用程序的答案。谁能告诉我该怎么做?提前致谢。

  1. Coins.java

    package com.example.android.cotescol;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.ListView;
    import java.util.ArrayList;

    public class Coins extends android.support.v4.app.Fragment{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.currency_list, container, false);
    final ArrayList<CoinObject> coins = new ArrayList<CoinObject>();
    coins.add(new CoinObject(1, "India", 1947));
    coins.add(new CoinObject(1, "India", 1947));

    CoinAdapter itemsAdapter = new CoinAdapter(getActivity(), coins);
    ListView listView = (ListView) rootView.findViewById(R.id.list);
    listView.setAdapter(itemsAdapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    CoinObject coinObject = coins.get(position);
    Intent intent = new Intent(Coins.this.getActivity(), DetailsActivity.class);
    startActivity(intent);
    }
    });

    return rootView;
    }
    }
  2. CoinObject.java

    package com.example.android.cotescol;

    import java.util.HashMap;
    import java.util.Locale;
    import java.util.Map;

    public class CoinObject {

    private final static int NO_IMAGE_AVAILABLE = R.drawable.nia;
    private final static String NOT_AVAILABLE = "Material Not Specified";
    private final static double NOT_KNOWN = 0.00;

    private int denomination;
    private String country;
    private String countryCode;
    private int year;
    private int obverseImageResourceId = NO_IMAGE_AVAILABLE;
    private int reverseImageResourceId = NO_IMAGE_AVAILABLE;
    private String material = NOT_AVAILABLE;
    private double diameter = NOT_KNOWN;
    private double weight = NOT_KNOWN;
    private double thickness = NOT_KNOWN;
    private double value = NOT_KNOWN;

    public CoinObject(int denomination, String country, int year, int obverseImageResourceId, int reverseImageResourceId , double diameter, double thickness, String material, double weight, double value) {
    this.denomination = denomination;
    this.country = country;
    this.year = year;
    this.obverseImageResourceId = obverseImageResourceId;
    this.reverseImageResourceId = reverseImageResourceId;
    this.diameter = diameter;
    this.thickness = thickness;
    this.material = material;
    this.weight = weight;
    this.value = value;
    this.countryCode = getCountryCode(country);
    }

    public CoinObject(int denomination, String country, int year, double diameter, double thickness, String material, double weight, double value) {
    this.denomination = denomination;
    this.country = country;
    this.year = year;
    this.diameter = diameter;
    this.thickness = thickness;
    this.material = material;
    this.weight = weight;
    this.value = value;
    this.countryCode = getCountryCode(country);
    }

    public CoinObject(int denomination, String country, int year) {
    this.denomination = denomination;
    this.country = country;
    this.year = year;
    this.countryCode = getCountryCode(country);
    }

    public String getCountryCode(String countryName) {
    // Get all country codes in a string array.
    String[] isoCountryCodes = Locale.getISOCountries();
    Map<String, String> countryMap = new HashMap<>();
    // Iterate through all country codes:
    for (String code : isoCountryCodes) {
    // Create a locale using each country code
    Locale locale = new Locale("", code);
    // Get country name for each code.
    String name = locale.getDisplayCountry();
    // Map all country names and codes in key - value pairs.
    countryMap.put(name, code);
    }
    // Get the country code for the given country name using the map.
    // Here you will need some validation or better yet
    // a list of countries to give to user to choose from.
    String countryCode = countryMap.get(countryName); // "NL" for Netherlands.

    return countryCode;
    }

    public int getDenomination() { return denomination; }
    public int getYear() { return year; }
    public int getObverseImageResourceId() { return obverseImageResourceId; }
    public int getReverseImageResourceId() { return reverseImageResourceId; }
    public double getDiameter() { return diameter; }
    public double getWeight() { return weight; }
    public double getThickness() { return thickness; }
    public double getValue() { return value; }
    public String getCountry() { return country; }
    public String getCountryCode() { return countryCode; }
    public String getMaterial() { return material; }
    }

最佳答案

您应该使您的 Coin 对象成为 Parcelable,然后您可以在 Intent 中将该对象作为额外的传递,

intent.putExtra("coin", coinObject);

然后在 Activity 中提取硬币对象,

Coin coin = intent.getParcelableExtra("coin");

关于android - 每个列表项 Android 的不同 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42451445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com