2017-06-07 5 views
1

ich will in Android Studio benutzerdefiniertes Layout für Listenansicht einstellenerstellen Ansicht benutzerdefinierte Liste in android

i in activity_main.xml Datei eine Listenansicht hinzufügen

<ListView 
      android:id="@+id/list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 

und eine Layout-Datei mit dem Namen Zeile erstellen .xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:id="@+id/icon"/> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

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

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="small" 
      android:id="@+id/text2"/> 
    </LinearLayout> 

</LinearLayout> 

und MainActivity.java Datei enthalten:

public class MainAct ivity erstreckt AppCompatActivity {

ListView list; 
String [] titles; 
String [] description; 
int[]imgs = {R.drawable.fb,R.drawable.chat,R.drawable.gplus,R.drawable.instagram}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Resources res = getResources(); 

    titles = res.getStringArray(R.array.titles); 
    description = res.getStringArray(R.array.description); 

    list = (ListView) findViewById(R.id.list); 
    MyAdapter adapter = new MyAdapter(this,titles,imgs,description); 
    list.setAdapter(adapter); 

} 
class MyAdapter extends ArrayAdapter{ 
    Context context; 
    int[] imgs; 
    String[] myTitles; 
    String[] myDescription; 

    MyAdapter (Context c , String[] titles , int[] imgs , String[]Description){ 
     super(c,R.layout.row,R.id.text1,titles); 
     this.context = c; 
     this.imgs = imgs; 
     this.myDescription = description; 
     this.myTitles = titles; 
    } 
    @Override 
    public View getView(int position , View convertView , ViewGroup parent){ 
     LayoutInflater layoutInflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View row = layoutInflater.inflate(R.layout.row,null,true); 
     ImageView images = (ImageView) findViewById(R.id.icon); 
     TextView myTitle = (TextView) findViewById(R.id.text1); 
     TextView myDescription = (TextView) findViewById(R.id.text2); 
     images.setImageResource(imgs[position]); 
     myTitle.setText(titles[position]); 
     myDescription.setText(description[position]); 
     return row; 
    } 
} 

}

wenn ich die Anwendung, Anzeige laufen: Leider Anwendung gestoppt hat.

Wie Sie dieses Problem lösen?

Fehlerprotokoll:

AndroidRuntime: FATAL EXCEPTION: main 
                       java.lang.NullPointerException 
                        at com.example.nik.myapplication.MainActivity$MyAdapter.getView(MainActivity.java:57) 
                        at android.widget.AbsListView.obtainView(AbsListView.java:2207) 
                        at android.widget.ListView.makeAndAddView(ListView.java:1845) 
                        at android.widget.ListView.fillDown(ListView.java:678) 
                        at android.widget.ListView.fillFromTop(ListView.java:739) 
                        at android.widget.ListView.layoutChildren(ListView.java:1661) 
                        at android.widget.AbsListView.onLayout(AbsListView.java:2037) 
                        at android.view.View.layout(View.java:14118) 
                        at android.view.ViewGroup.layout(ViewGroup.java:4474) 
                        at android.widget.RelativeLayout.onLayout(RelativeLayout.java:985) 
                        at android.view.View.layout(View.java:14118) 
                        at android.view.ViewGroup.layout(ViewGroup.java:4474) 
                        at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
                        at android.view.View.layout(View.java:14118) 
                        at android.view.ViewGroup.layout(ViewGroup.java:4474) 
                        at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:435) 
                        at android.view.View.layout(View.java:14118) 
                        at android.view.ViewGroup.layout(ViewGroup.java:4474) 
                        at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
                        at android.view.View.layout(View.java:14118) 
                        at android.view.ViewGroup.layout(ViewGroup.java:4474) 
                        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1670) 
                        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1528) 
                        at android.widget.LinearLayout.onLayout(LinearLayout.java:1441) 
                        at android.view.View.layout(View.java:14118) 
                        at android.view.ViewGroup.layout(ViewGroup.java:4474) 
                        at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
                        at android.view.View.layout(View.java:14118) 
                        at android.view.ViewGroup.layout(ViewGroup.java:4474) 
                        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2183) 
                        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1947) 
                        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1139) 
                        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4879) 
                        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776) 
                        at android.view.Choreographer.doCallbacks(Choreographer.java:579) 
                        at android.view.Choreographer.doFrame(Choreographer.java:548) 
                        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762) 
                        at android.os.Handler.handleCallback(Handler.java:725) 
                        at android.os.Handler.dispatchMessage(Handler.java:92) 
                        at android.os.Looper.loop(Looper.java:153) 
                        at android.app.ActivityThread.main(ActivityThread.java:5341) 
                        at java.lang.reflect.Method.invokeNative(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:511) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:929) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 
                        at dalvik.system.NativeStart.main(Native Method) 
+0

Bitte zeigen Sie ein Fehlerprotokoll –

+0

kann nicht sicher wissen, kein Fehlerprotokoll gebucht, sondern nur eine vielleicht: anstelle von ImageView images = (ImageView) findViewById (R.id.icon); Sie sollten versuchen, es aus der ROW-Ansicht wie folgt zu finden: ImageView images = (ImageView) row.findViewById (R.id.icon); – koksalb

+0

Fehlerprotokoll hinzugefügt ... –

Antwort

2

Hier ist Ihre Antwort:

@Override 
public View getView(int position , View convertView , ViewGroup parent){ 
    LayoutInflater layoutInflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View row = layoutInflater.inflate(R.layout.row,null,true); 
    ImageView images = (ImageView) row.findViewById(R.id.icon); 
    TextView myTitle = (TextView) row.findViewById(R.id.text1); 
    TextView myDescription = (TextView) row.findViewById(R.id.text2); 
    images.setImageResource(imgs[position]); 
    myTitle.setText(titles[position]); 
    myDescription.setText(description[position]); 
    return row; 
} 

Und hier ist der Grund, dass Ihre Antwort:

Sie haben eine Null-Zeiger Ausnahme, weil Sie findViewById wurden fordern Ihre Aktivität und nicht die Aussicht, die Sie gerade aufgeblasen haben. Da die Aktivität keine Felder mit dem Symbol IDs, Text1 oder Text2 enthält, erhalten Sie keine Ergebnisse zurück. Wenn Sie versuchen, sie festzulegen, wird die Ausnahme ausgelöst.

Hoffe, dass hilft!

+0

Fehlerprotokoll hinzugefügt ... –

+0

Ich habe meinen Kommentar mit der Lösung für Ihr Problem bearbeitet! Die Null-Zeiger-Ausnahme machte das leichter zu diagnostizieren, danke für das Hinzufügen des Fehlerprotokolls! –

+0

danke, ich füge View vor findViewById, aber bekomme diesen Fehler: Fehler: (54, 48) Fehler: nicht statische Methode findViewById (int) kann nicht aus einem statischen Kontext verwiesen werden –

Verwandte Themen