我已经为片段中的ListView创建了自己的自定义适配器。我相信我的一切都正确,但是启动我的应用程序时它仍然引发错误,并且崩溃。我尝试对其进行调试,但最终无法找到问题。
这是我的片段代码:
execl*()
第public class TabFragment0 extends Fragment {
Button addPR;
ArrayList<PRObject> PRList;
PRObjectAdapter PRListAdapter;
private ListView listViewer;
private final String PRKey = "PRArgs";
public TabFragment0() {
// Required empty public constructor
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.tab_personalrecords, container,
false);
if(loadList(PRKey) != null) {
PRList = loadList(PRKey);
}
PRListAdapter = new PRObjectAdapter(getActivity(), PRList);
listViewer = (ListView) view.findViewById(R.id.prListView);
listViewer.setAdapter(PRListAdapter);
...................................................
行引发了错误。我也尝试过listViewer.setAdapter(PRListAdapter);
就像PRListAdapter = new PRObjectAdapter(this.getActivity(), PRList);
一样无济于事。
这是我的适配器类代码:
PRListAdapter = new PRObjectAdapter(getContext(), PRList);
我想说的是我的import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.TextView;
import java.util.ArrayList;
public class PRObjectAdapter extends BaseAdapter {
private LayoutInflater inflater;
private ArrayList<PRObject> objects;
private class ViewHolder {
TextView textview1;
TextView textview2;
}
public PRObjectAdapter(Context context, ArrayList<PRObject> objects) {
inflater = LayoutInflater.from(context);
this.objects = objects;
}
@Override
public int getCount() {
return objects.size();
}
@Override
public Object getItem(int position) {
return objects.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
PRObjectAdapter.ViewHolder holder = null;
if(convertView == null) {
holder = new PRObjectAdapter.ViewHolder();
convertView = inflater.inflate(R.layout.pr_item_layout, null);
holder.textview1 = (TextView)
convertView.findViewById(R.id.prTitleTV);
holder.textview2 = (TextView)
convertView.findViewById(R.id.prNumTV);
convertView.setTag(holder);
} else {
holder = (PRObjectAdapter.ViewHolder) convertView.getTag();
}
holder.textview1.setText(objects.get(position).getTitle());
holder.textview2.setText(objects.get(position).getNum());
return convertView;
}
}
方法中的问题,但是我无法查明问题所在。
任何帮助将不胜感激。
编辑:
此问题不是重复的 this NullPointerException question
我的问题专门涉及Android Studio中的fragment / customAdapter组合,而上面的链接只是有关NPE是什么以及如何修复它的指南。
答案 0 :(得分:0)
好的,结果证明适配器类没有问题,它可以按预期完美运行。我的问题是:
ArrayList<PRObject> PRList;
设置为未在我的片段类中初始化。
解决方法是将其更改为:
ArrayList<PRObject> PRList = new ArrayList<PRObject>();
现在可以按预期加载视图。希望有人可以在我的适配器类之外使用它,因为它起作用了,哈哈
为大家加油!