我试图在Fragmnet中使用ListView和自定义适配器(baseAdapter)。
当我直接在MainActivity中使用此代码时,一切正常,但是当我在片段中使用它时它确实崩溃但它没有显示任何内容,它只是一个空白片段。此外,当我尝试使用简单的arrayAdapter来绑定片段中的一个textView时,它运行正常,所以问题将出现在我认为的自定义适配器中。
为什么不显示ListView?
我的代码:Fragment1.java
private SQLiteDatabase dataBaseall;
HashMap<String, String> ChatqueryValues;
HashMap<String, String> ChatqueryValuesB;
ChatDbHelper Chatcontroller = new ChatDbHelper(getActivity());
ChatAllDbHelper controller_all = new ChatAllDbHelper(getActivity());
private AlertDialog.Builder build;
Cursor cursor;
Contact_Activity_Adapter ListAdapter;
private ArrayList<String> conId = new ArrayList<String>();
private ArrayList<String> con_fullname = new ArrayList<String>();
private ArrayList<String> con_number = new ArrayList<String>();
private ArrayList<String> con_username = new ArrayList<String>();
private ArrayList<String> con_userid = new ArrayList<String>();
private ArrayList<String> con_pic = new ArrayList<String>();
private ArrayList<String> con_ischat = new ArrayList<String>();
ListView LISTVIEW;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.frag1,container,false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// ListView listView = (ListView) getActivity().findViewById(R.id.List);
LISTVIEW = (ListView)getActivity(). findViewById(R.id.List);
SQLITEHELPER = new ContactDB(getActivity());
mHelperall = new ChatAllDbHelper(getActivity());
}
@Override
public void onResume() {
ShowSQLiteDBdata();
super.onResume();
}
private void ShowSQLiteDBdata() {
SQLITEDATABASE = SQLITEHELPER.getWritableDatabase();
cursor = SQLITEDATABASE.rawQuery("SELECT * FROM contact ", null);
conId.clear();
con_fullname.clear();
con_number.clear();
con_username.clear();
con_userid.clear();
con_pic.clear();
con_ischat.clear();
if (cursor.moveToFirst()) {
do {
conId.add(cursor.getString(cursor.getColumnIndex(ContactDB.KEY_ID)));
con_fullname.add(cursor.getString(cursor.getColumnIndex(ContactDB.KEY_CON_FULLNAME)));
con_number.add(cursor.getString(cursor.getColumnIndex(ContactDB.KEY_CON_NUMBER)));
con_username.add(cursor.getString(cursor.getColumnIndex(ContactDB.KEY_CON_USERNAME)));
con_userid.add(cursor.getString(cursor.getColumnIndex(ContactDB.KEY_CON_USERID)));
con_pic.add(cursor.getString(cursor.getColumnIndex(ContactDB.KEY_CON_PIC)));
con_ischat.add(cursor.getString(cursor.getColumnIndex(ContactDB.KEY_CON_ISCHAT)));
} while (cursor.moveToNext());
}
ListAdapter = new Contact_Activity_Adapter(getActivity(),
conId,
con_fullname,
con_number,
con_username,
con_userid,
con_pic,
con_ischat
);
Collections.sort(con_fullname, String.CASE_INSENSITIVE_ORDER);
LISTVIEW.setAdapter(ListAdapter);
ListAdapter.notifyDataSetChanged();
cursor.close();
// Collections.sort(con_fullname);
}
}
答案 0 :(得分:0)
LISTVIEW = (ListView)getActivity(). findViewById(R.id.List);
那是错的。您试图获取活动列表的链接,但您的列表是片段。您需要从onCreateView中的片段布局中获取它,如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag1,container,false);
LISTVIEW = (ListView) view.findViewById(R.id.List);
return view;
}
更多信息here。这里有很多类似的问题。