2017-02-24 7 views
-1

Ich versuche, eine Registerkartenaktivität zu erstellen, die eine Liste enthält. Ich habe die Registerkartenaktivität erstellt und möchte die Liste im Fragment erstellen. Jedes Listenelement enthält 2 ImageViews und 4 TextViews. Daher habe ich eine benutzerdefinierte Klasse und einen benutzerdefinierten ArrayAdapter erstellt. Hier ist der Code -ArrayAdapter zeigt Fehler an: Registerkartenaktivität und ListView

  1. Coins.java - Dies ist das Fragment der Registerkarte Aktivität.

    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; 
        } 
    } 
    
  2. CoinObject.java - Es ist eine benutzerdefinierte Klasse, in der jedes Objekt alle Details der Münze enthält.

    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; } 
    } 
    
  3. CoinAdapter.java - Es ist ein Brauch 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; 
        } 
    } 
    

In der Coins.java Datei, erhalte ich einen Fehler, während eine Instanz der Klasse CoinAdapter zu schaffen. Auch die findViewById() wird rot angezeigt. Error Picture

Es wäre wirklich hilfreich, wenn jemand mich dazu bringen würde, es richtig zu machen. Danke im Voraus.

Antwort

0

ersetzen:

CoinAdapter itemsAdapter = new CoinAdapter(this, coins); 

mit:

CoinAdapter itemsAdapter = new CoinAdapter(getActivity(), coins); 

ersetzen:

ListView listView = (ListView) findViewById(R.id.list); 

mit:

ListView listView = (ListView) rootView.findViewById(R.id.list); 
Verwandte Themen