我已经针对同样的问题搜索了很多其他答案,但没有找到任何适合我的解决方案。正如标题所说,问题是我的自定义适配器中的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个小时才能回答我自己的问题..
答案 0 :(得分:0)
我认为在R.layout.category_list
文件中,您需要为ListView提供以下属性:
android:id="@android:id/list"
ListFragment(和ListActivity)会在您调用ListView
等方法时查找此ID以查找setListAdapter()
。
此外,如果您只想要一个ListView,则不必提供布局文件。只需不要覆盖onCreateView(),系统就会自动为您提供ListView
。只有当你想要一个自定义布局时才需要膨胀一个,如果你这样做,ListView应该具有上述id。