同じ問題について他の多くの回答を検索しましたが、私に合った解決策は見つかりませんでした。タイトルが示すように、問題は、カスタム アダプターの 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;
}
}
そして、ここに私の2つのレイアウトファイルがあります:
<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>
onCreateView の前に呼び出され、その時点でフラグメントがまだ ListView に関連付けられていないため、onCreate でアダプターを設定すると問題が発生する可能性があると考えました。そのため、コードを onCreate から onStart メソッドに移動しましたが、何も変わりませんでした。
また、getCount() は、データベースからの要素 red の正確な数である 6 を正しく返します。
どんな助けでも本当に感謝します!! ありがとう。
編集:
解決しました!
問題はアクティビティにあり、次のコードがありました:
fragmentTransaction.add(0, categoryListFragment);
私が着替えた
fragmentTransaction.add(R.id.activity_main, categoryListFragment);
フラグメントをアタッチするビュー ID を指定しないと、フラグメントが描画されません!
さらに、私はこれから変更しなければなりませんでした
view = mInflater.inflate(R.layout.category_element, parent);
これに:
view = mInflater.inflate(R.layout.category_element, null);
getView メソッドで。
PS。8 時間が経過するまで自分の質問に答えられないため、この内容を編集しています。