2016-11-30 118 views
-3

我试图在fragmnet中使用带有自定义适配器(baseAdapter)的ListView。在片段中设置ListView适配器

当我直接在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

'LISTVIEW =(ListView)getActivity()。 findViewById(R.id.List);'请不要使用这个......在这个问题上有bazillions的回答:如何在片段中正确地获取视图? ...做一些研究 – Selvin

+0

1)不要大写锁定你的变量名称。 2)强烈考虑使用Java类来存储一个'Contact'并在7个单独的列表中使用'List '......这真是糟糕的设计https://guides.codepath.com/android/Using-an-ArrayAdapter- with-ListView#using-a-custom-arrayadapter –

回答

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

+0

无法正常工作,请详细说明如何实现它。 – kengodmans

+0

我不会。从一些基本的教程或样本开始,如果你不知道如何做到这一点。顺便说一句,它看起来像这不是你的代码中唯一的错误。 – lewkka