我是Android的新手,试图将先前在我的主Activity中控制的listview转移到一个fragment中。
我的MainActivity
扩展了FragmentActivity
。我得到了一个空指针,用于设置适配器和包含populateList()
方法的行。
不确定解决方案是否与getActivity()
和/或我一直在阅读的setListAdapter()
选项有关。我知道它正在从保存中找到项目,但我不确定如何解决这个问题。任何见解都将不胜感激。
附加信息:
我正在使用android.support.v4.app.FragmentActivity
。FragmentS
位于public class TabbedActivity extends Fragment {
中。
public static class FragmentS extends Fragment {
public FragmentS() {
}
List<LiftSave> LiftSaves = new ArrayList<LiftSave>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.listview_s,
container, false);
DatabaseHandler dbHandler;
dbHandler = new DatabaseHandler (getActivity().getApplicationContext());
if (dbHandler.getLiftSavesCount() != 0)
LiftSaves.addAll(dbHandler.getAllLiftSaves());
populateList();
return rootView;
}
private void populateList() {
ListView saveListView = (ListView)getActivity().findViewById(R.id.saveListView);
ArrayAdapter<LiftSave> saveAdapter;
saveAdapter = new SaveListAdapter();
saveListView.setAdapter(saveAdapter);
}
public class SaveListAdapter extends ArrayAdapter<LiftSave> {
public SaveListAdapter() {
super(getActivity(), R.layout.listview_item, LiftSaves);
}
@Override
public View getView(int position, View view, ViewGroup parent) {
if (view == null)
view = getActivity().getLayoutInflater().inflate(R.layout.listview_item, parent, false);
LiftSave currentLiftSave = LiftSaves.get(position);
TextView liftName = (TextView) view.findViewById(R.id.liftName);
liftName.setText(currentLiftSave.getLiftName());
TextView maxValue = (TextView) view.findViewById(R.id.maxValue);
maxValue.setText(currentLiftSave.getMaxValue());
TextView weightAndReps = (TextView) view.findViewById(R.id.weightAndReps);
weightAndReps.setText(currentLiftSave.getRepsAndWeight());
TextView liftNotes = (TextView) view.findViewById(R.id.liftNotes);
liftNotes.setText(currentLiftSave.getLiftNotes());
TextView date = (TextView) view.findViewById(R.id.todayDate);
date.setText(currentLiftSave.getTodayDate());
return view;
}
}}
XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".TabbedActivity$FragmentS"
android:background="@android:color/holo_blue_dark">
<LinearLayout
android:id="@+id/tabSaveList"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Saved Maxes"
android:id="@+id/textView"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:textColor="#fffaf4a1"
android:textStyle="bold" />
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/saveListView" />
</LinearLayout>
</RelativeLayout>
onCreateView()
和populateList()
中实例化你的适配器两次?onCreateView()
方法之前放置List<LiftSave> LiftSaves = new ArrayList<LiftSave>();
saveListView
的ListView
对象,位于listview_s.xml
中。 - Ramipublic class TabbedActivity extends Fragment {
的类中。不确定是否有影响。对我的格式不熟悉,抱歉。 - Austinlistview_s.xml
文件吗? - Rami