2016-11-30 25 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); 'Please、これを使用しないでください...質問にbazillionsの答えがあります:フラグメントのビューを正しく取得するにはどうすればいいですか? ... do some research – Selvin

+0

1)変数名を固定しないでください。 2)Javaクラスを使って1つの 'Contact'を格納し、7つの別々のリストにある' List 'を使うことを強く検討する...それは本当に貧弱なデザインですhttps://guides.codepath.com/android/Using-an-ArrayAdapter- with-ListView#-ad-a-custom-arrayadapter –

答えて

0
LISTVIEW = (ListView)getActivity(). findViewById(R.id.List); 

間違っているのです。あなたの活動リストへのリンクを取得しようとしていますが、リストは断片的です。

@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:あなたはこのように、onCreateViewで、フラグメントレイアウトからそれを取得する必要があります。ここには多くの同様の質問があります。

+0

が機能しない場合は、実装方法の詳細を教えてください。 – kengodmans

+0

私はしません。これを行う方法がわからない場合は、基本的なチュートリアルやサンプルから始めましょう。 btw、これはあなたのコードで唯一の間違いではないようです。 – lewkka

関連する問題