我正在Android中创建一个书籍应用程序,我正在尝试在片段中创建一个Listview以显示书籍列表。我正在从Google电子表格中获取图书信息。
我有一本书课:
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;
}
}
该片段如下:
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
}
});
}
}
我还有一个BookAdapter类:
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;
}
}
我得到的错误如下: V / BoostFramework:BoostFramework():mPerf = com.qualcomm.qti.Performance@41edcd7 D / AndroidRuntime:关闭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.
你能帮我吗?非常感谢你!!
答案 0 :(得分: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);
}}