2016-12-22 4 views
0

Ich habe eine Klasse Country.java erstellt und meinen benutzerdefinierten Adapter myListAdapter, die ArrayAdapter erweitert. Ich erhalte keinen messeges in meinem LogCat entweder aber die Anwendung abstürzt in Zeile:ListView mit benutzerdefinierten Adaptern

countName.setText(" "+currentCountry.getCountryName()); 

so was falsch ist hier, wie kann ich Country bekommen?

public class Country{ 
    private String countryName; 
    private String capitalName; 

    public Country(String countryName, String capitalName) { 
    this.countryName = countryName; 
    this.capitalName = capitalName; 
} 

    public String getCountryName() { 
     return countryName; 
    } 
    public String getCapitalName() { 
     return capitalName; 
    } 
} 

hier ist Klasse myListAdapter

private class MyListAdapter extends ArrayAdapter<Country>{ 

     public MyListAdapter() { 
      super(MainActivity.this, R.layout.item_view, myCountries); 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 

      View itemView = convertView; 
      if(itemView == null){ 
       itemView = getLayoutInflater().inflate(R.layout.item_view, parent, false); 
      } 

      Country currentCountry = myCountries.get(position); 

      TextView countName = (TextView) findViewById(R.id.item_countryName); 
      countName.setText(" "+currentCountry.getCountryName()); 

      TextView capName = (TextView) findViewById(R.id.item_CapName); 
      capName.setText(currentCountry.getCapitalName()); 

      return itemView; 
     } 
    } 

item_view.xml ist:

<TextView 
     android:text="TextView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/item_countryName" /> 

    <TextView 
     android:text="TextView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/item_CapName" /> 
+0

Was ist 'myCountries'? Woher kommt das? –

+0

http://androidexample.com/How_To_Create_A_Custom_Listview_-_Android_Example/index.php?view=article_discription&aid=67 verweisen Sie auf diesen Link. Es ist gut, ViewHolder für Adapter zu verwenden. –

Antwort

0
Change the below code in your adapter : 

TextView countName = (TextView) itemView.findViewById(R.id.item_countryName); 
      countName.setText(" "+currentCountry.getCountryName()); 

      TextView capName = (TextView) itemView.findViewById(R.id.item_CapName); 
      capName.setText(currentCountry.getCapitalName()); 

bearbeiten Mein Code:

MyListAdapter adapter = new MyListAdapter(this, 
     R.layout.item_view, myCountries); 
listView.setAdapter(adapter); 
+0

es hat nicht geholfen, noch Anwendung abgestürzt – SofL

+0

Können Sie Ihre Ausnahme teilen. Erhalten Sie immer noch Nullpointer-Ausnahme? –

+0

Ich bekomme diese folgende Ausnahme – SofL

0

Feuern Sie die Methode getView() manuell aus? Sie sollten @Override diese Methode wie folgt. Wenn Sie den Adapter einstellen und der Bildschirm geladen ist, wird getView() automatisch ausgelöst.

@Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 

    } 

und Sie sollten findViewById() Methode wie unten verwenden;

TextView countName = (TextView) itemView.findViewById(R.id.item_countryName); 
+0

DANK ALT. Ich war Miising (TextView) itemView.findViewById (R.id.item_countryName); – SofL

+0

Ich bin froh, Ihnen zu helfen. Funktioniert es, ohne die getView() Methode zu überschreiben? – oyenigun

+0

Nein, eigentlich überschreibe ich die getView() -Methode, aber wenn ich den Code hier einfügen, habe ich es versehentlich vermisst. – SofL

Verwandte Themen