ArrayAdapter showing Error: Tabbed Activity and ListView
ArrayAdapter showing Error: Tabbed Activity and ListView
我正在尝试创建一个包含列表的选项卡 Activity。我已经创建了 Tabbed Activity 并且我想在片段中创建列表。每个列表项包含 2 个 ImageView 和 4 个 TextView。因此,我创建了一个自定义 Class 和一个自定义 ArrayAdapter。这是代码 -
Coins.java - 这是选项卡 Activity.
的片段
package com.example.android.cotescol;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
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<Currency>();
coins.add(new CoinObject(1, "India", 1947));
coins.add(new CoinObject(1, "India", 1947));
CoinAdapter itemsAdapter = new CoinAdapter(this, coins);
ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(itemsAdapter);
return rootView;
}
}
CoinObject.java - 这是一种习俗class,其中每个对象都包含硬币的所有细节。
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; }
}
CoinAdapter.java - 这是一个自定义的 ArrayAdapter
package com.example.android.cotescol;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class CoinAdapter extends ArrayAdapter<CoinObject>{
public CoinAdapter(Context context, ArrayList<CoinObject> currencies) {
super(context, 0, currencies);
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View listItemView = convertView;
if (listItemView == null) {
listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
}
CoinObject currentCoinObject = getItem(position);
TextView denominationTextView = (TextView) listItemView.findViewById(R.id.denomination_text_view);
denominationTextView.setText(currentCoinObject.getDenomination());
TextView countryTextView = (TextView) listItemView.findViewById(R.id.country_text_view);
countryTextView.setText(currentCoinObject.getCountry() + "(" + currentCoinObject.getCountryCode() + ")");
TextView yearTextView = (TextView) listItemView.findViewById(R.id.year_text_view);
yearTextView.setText(currentCoinObject.getYear());
ImageView obverseImageView = (ImageView) listItemView.findViewById(R.id.obverse_image_view);
obverseImageView.setImageResource(currentCoinObject.getObverseImageResourceId());
ImageView reverseImageView = (ImageView) listItemView.findViewById(R.id.reverse_image_view);
reverseImageView.setImageResource(currentCoinObject.getReverseImageResourceId());
return listItemView;
}
}
在 Coins.java 文件中,我在创建 CoinAdapter class 实例时遇到错误。 findViewById() 也显示为红色。 Error Picture
如果有人指导我以正确的方式去做,那将非常有帮助。提前致谢。
替换:
CoinAdapter itemsAdapter = new CoinAdapter(this, coins);
与:
CoinAdapter itemsAdapter = new CoinAdapter(getActivity(), coins);
替换:
ListView listView = (ListView) findViewById(R.id.list);
与:
ListView listView = (ListView) rootView.findViewById(R.id.list);
我正在尝试创建一个包含列表的选项卡 Activity。我已经创建了 Tabbed Activity 并且我想在片段中创建列表。每个列表项包含 2 个 ImageView 和 4 个 TextView。因此,我创建了一个自定义 Class 和一个自定义 ArrayAdapter。这是代码 -
Coins.java - 这是选项卡 Activity.
的片段package com.example.android.cotescol; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; 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<Currency>(); coins.add(new CoinObject(1, "India", 1947)); coins.add(new CoinObject(1, "India", 1947)); CoinAdapter itemsAdapter = new CoinAdapter(this, coins); ListView listView = (ListView) findViewById(R.id.list); listView.setAdapter(itemsAdapter); return rootView; } }
CoinObject.java - 这是一种习俗class,其中每个对象都包含硬币的所有细节。
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; } }
CoinAdapter.java - 这是一个自定义的 ArrayAdapter
package com.example.android.cotescol; import android.content.Context; import android.support.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; public class CoinAdapter extends ArrayAdapter<CoinObject>{ public CoinAdapter(Context context, ArrayList<CoinObject> currencies) { super(context, 0, currencies); } @NonNull @Override public View getView(int position, View convertView, ViewGroup parent) { View listItemView = convertView; if (listItemView == null) { listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false); } CoinObject currentCoinObject = getItem(position); TextView denominationTextView = (TextView) listItemView.findViewById(R.id.denomination_text_view); denominationTextView.setText(currentCoinObject.getDenomination()); TextView countryTextView = (TextView) listItemView.findViewById(R.id.country_text_view); countryTextView.setText(currentCoinObject.getCountry() + "(" + currentCoinObject.getCountryCode() + ")"); TextView yearTextView = (TextView) listItemView.findViewById(R.id.year_text_view); yearTextView.setText(currentCoinObject.getYear()); ImageView obverseImageView = (ImageView) listItemView.findViewById(R.id.obverse_image_view); obverseImageView.setImageResource(currentCoinObject.getObverseImageResourceId()); ImageView reverseImageView = (ImageView) listItemView.findViewById(R.id.reverse_image_view); reverseImageView.setImageResource(currentCoinObject.getReverseImageResourceId()); return listItemView; } }
在 Coins.java 文件中,我在创建 CoinAdapter class 实例时遇到错误。 findViewById() 也显示为红色。 Error Picture
如果有人指导我以正确的方式去做,那将非常有帮助。提前致谢。
替换:
CoinAdapter itemsAdapter = new CoinAdapter(this, coins);
与:
CoinAdapter itemsAdapter = new CoinAdapter(getActivity(), coins);
替换:
ListView listView = (ListView) findViewById(R.id.list);
与:
ListView listView = (ListView) rootView.findViewById(R.id.list);