2017-10-24 6 views
0

Ich mache eine Buch-App in Android, und ich versuche, eine Listview innerhalb eines Fragments zu erstellen, um eine Liste der Bücher anzuzeigen. Ich erhalte die Buchinformationen aus einer Google-Tabelle.Listview in einem Fragment

Ich habe ein Buch Klasse:

package com.example.app_tfg; 

import android.graphics.drawable.Drawable; 

/** 
* Clase Book. Contiene un campo para el título y otro para la portada del libro. 
*/ 

public class Book { 
    static String title; 
    static Drawable cover; 

    public Book(){ 
     super(); 
    } 

    public Book(String title, Drawable cover){ 
     super(); 
     this.title = title; 
     this.cover = cover; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title){ 
     this.title = title; 
    } 

    public Drawable getCover() { 
     return cover; 
    } 

    public void setCover(Drawable cover) { 
     this.cover = cover; 
    } 

} 

Das Fragment ist folgende:

import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.support.v4.app.Fragment; 
import android.os.Bundle; 
import android.support.v7.widget.SearchView; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ListView; 

import static com.example.app_tfg.Spreadsheets.read_only; 


public class MiEstanteria extends Fragment { 
    static String read = "si"; 
    ListView bookList; 
    Book book_data[]; 

    public MiEstanteria() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     return inflater.inflate(R.layout.fragment_mi_estanteria, container, false); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setHasOptionsMenu(true); 
     Intent intent = new Intent(getActivity(), Spreadsheets.class); 
     intent.putExtra(read_only,read); 
     startActivity(intent); 

     BookAdapter bookAdapter = new BookAdapter(getActivity(),R.layout.fila_lista_miestanteria,book_data); 
     bookList = (ListView) bookList.findViewById(R.id.book_list); 
     bookList.setAdapter(bookAdapter); 

     bookList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       //Aquí Book_info 
      } 
     }); 
    } 
}  

Ich habe auch eine BookAdapter Klasse:

package com.example.app_tfg; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

/** 
* Clase BookAdapter 
*/ 

public class BookAdapter extends ArrayAdapter <Book> { 
    private Context context; 
    int layout; 
    Book data[] = null; 

    public BookAdapter (Context context, int layout, Book data[]) { 
     super(context, layout, data); 
     this.context = context; 
     this.layout = layout; 
     this.data = data; 
    } 

    //Creo la vista 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     BookHolder holder; 

     if(row == null){ 
      LayoutInflater inflater = LayoutInflater.from(context); 
      row = inflater.inflate(layout,parent,false); 

      holder = new BookHolder(); 
      holder.cover = (ImageView) row.findViewById(R.id.book_cover); 
      holder.title = (TextView) row.findViewById(R.id.book_title); 
      row.setTag(holder); 
     } 
     else { 
      holder = (BookHolder) row.getTag(); 
     } 

     Book book = data[position]; 
     holder.title.setText(Book.title); 
     holder.cover.setImageDrawable(Book.cover); 

     return row; 
    } 

    static class BookHolder{ 
     ImageView cover; 
     TextView title; 

    } 
} 

Der Fehler I‘ m bekommen ist folgendes: V/BoostFramework: BoostFram ework(): mPerf = [email protected] D/Android Runtime: Ausschalten VM

    --------- beginning of crash 
E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.example.app_tfg, PID: 19179 
        java.lang.NullPointerException 
         at java.util.Objects.requireNonNull(Objects.java:203) 
         at java.util.Arrays$ArrayList.<init>(Arrays.java:3826) 
         at java.util.Arrays.asList(Arrays.java:3813) 
         at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:139) 
         at com.example.app_tfg.BookAdapter.<init>(BookAdapter.java:0) 
         at com.example.app_tfg.MiEstanteria.onCreate(MiEstanteria.java:45) 
         at android.support.v4.app.Fragment.performCreate(Fragment.java:2177) 
         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1244) 
         at android.support.v4.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1080) 
         at android.support.v4.app.FragmentTransition.calculateFragments(FragmentTransition.java:971) 
         at android.support.v4.app.FragmentTransition.startTransitions(FragmentTransition.java:95) 
         at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2143) 
         at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2098) 
         at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2008) 
         at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710) 
         at android.os.Handler.handleCallback(Handler.java:751) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:154) 
         at android.app.ActivityThread.main(ActivityThread.java:6119) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
Application terminated. 

Können Sie mir bitte helfen ?? Ich danke dir sehr!!

+3

Mögliche Duplikat [Was für eine Nullpointer ist, und wie kann ich es beheben?] (Https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do- i-fix-it) – Alejandro

+1

Ist Ihre Buchdaten initialisiert und hat Werte ?? –

+0

Entschuldigung, ich habe vergessen zu erwähnen, dass ich auch eine Buchklasse habe. Ich bin der Bearbeitung der Frage –

Antwort

0
try this 


public class MiEstanteria extends Fragment { 
    static String read = "si"; 
    ListView bookList; 
    Book book_data[]= new Book[0]; 
    BookAdapter bookAdapter; 

    public MiEstanteria() { 
     Required empty public constructor 
    } 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_mi_estanteria,container, false); 
     bookList = (ListView) v.findViewById(R.id.book_list); 
     bookList.setAdapter(bookAdapter); 
     bookList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       //Aquí Book_info 
      } 
     }); 
     return v; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setHasOptionsMenu(true); 
     bookAdapter = new BookAdapter(getActivity(),R.layout.fila_lista_miestanteria,book_data); 
    }} 
+0

Ich habe versucht, aber es funktioniert nicht :(Danke !! –

+0

Intent Absicht = new Intent (getActivity(), Spreadsheets.class); intent.putExtra (read_only, lesen); startActivity (Absicht); entfernen Sie dieses von Ihrem Code. sein Schlecht. Sie laufen andere Tätigkeit im Erstellungsfragment –

+0

ich lösche es, aber ich habe noch einen Fehler –

Verwandte Themen