在片段中设置ListView适配器

时间:2016-11-30 14:41:29

标签: java android listview android-fragments

我试图在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);
    }




}

1 个答案:

答案 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。这里有很多类似的问题。