我已经搜索了很多其他相同问题的答案,但没有找到任何适合我的解决方案。正如标题所说,问题是我的自定义适配器中的 getView 方法没有被调用。
这是代码(首先是片段):
public class CategoryListFragment extends ListFragment
implements NewCategoryDialogListener {
private GestoreAttivitaDbHelper mDbHelper;
private CategoryListAdapter mAdapter;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
mAdapter = new CategoryListAdapter(getActivity());
setListAdapter(mAdapter);
CategoryLoader categoryLoader = new CategoryLoader();
if (mDbHelper == null) {
mDbHelper = new GestoreAttivitaDbHelper(getActivity().getApplicationContext());
}
SQLiteDatabase db = mDbHelper.getReadableDatabase();
mAdapter.addAll(categoryLoader.getAllCategories(db));
mAdapter.notifyDataSetChanged();
mAdapter.getCount();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.category_list, container);
}
这是适配器:
public class CategoryListAdapter extends ArrayAdapter<CategoryElement> {
private LayoutInflater mInflater;
public CategoryListAdapter(Context ctx) {
super(ctx, R.layout.category_element);
mInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
Log.d("Adapter", "Restituisco la view per l'elemento");
if (convertView == null) {
view = mInflater.inflate(R.layout.category_element, null);
} else {
view = convertView;
}
//((TextView) view.findViewById(R.id.category_element_text)).setText(getItem(position).getName());
TextView textView = (TextView) view.findViewById(R.id.category_element_text);
textView.setText(getItem(position).getName());
return view;
}
}
这是我的两个布局文件:
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/category_list"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
和:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/category_element"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/category_element_text"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
</LinearLayout>
我认为在 onCreate 中设置适配器可能是一个问题,因为它是在 onCreateView 之前调用的,并且当时该片段尚未与 ListView 关联。所以我将代码从 onCreate 移动到 onStart 方法,但没有任何改变。
此外,getCount() 正确返回我 6,即数据库中红色元素的精确数量。
任何帮助将非常感激!!谢谢。
编辑:
解决了!
问题出在活动中,我有以下代码:
fragmentTransaction.add(0, categoryListFragment);
我改变了
fragmentTransaction.add(R.id.activity_main, categoryListFragment);
如果不指定片段应该附加到的 View id,它永远不会绘制它!
另外,我不得不改变这个
view = mInflater.inflate(R.layout.category_element, parent);
对此:
view = mInflater.inflate(R.layout.category_element, null);
在 getView 方法中。
PS。我正在编辑这个因为直到 8 小时过去了我才能回答我自己的问题..