2014-10-30 70 views
-1

我想在我的應用程序中顯示一個簡單的Contacs列表。從谷歌的示例代碼是非常大的和複雜的,因此我搜索其它實例..我發現這個之一:Android的接觸沒有顯示im ListView

import android.content.*; 
import android.database.*; 
import android.net.*; 
import android.os.*; 
import android.provider.*; 
import android.support.v4.app.*; 
import android.support.v4.content.*; 
import android.view.*; 
import android.widget.*; 

import android.support.v4.content.CursorLoader; 
import android.support.v4.content.Loader; 

public class ContactsFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor>, AdapterView.OnItemClickListener 
{ 
     private CursorAdapter mAdapter; 

     @Override 
     public void onCreate(Bundle savedInstanceState) 
     { 
       super.onCreate(savedInstanceState); // create adapter once 
       Context context = getActivity(); 
       int layout = android.R.layout.simple_list_item_1; 
       Cursor c = null; // there is no cursor yet 
       int flags = 0; // no auto-requery! Loader requeries. 
       mAdapter = new SimpleCursorAdapter(context, layout, c, FROM, TO, flags); 
     } 

     @Override 
     public void onActivityCreated(Bundle savedInstanceState) 
     { 
       super.onActivityCreated(savedInstanceState); // each time we are started use our listadapter 
       setListAdapter(mAdapter); // and tell loader manager to start loading 
       getLoaderManager().initLoader(0, null, this); 
     } 

     // columns requested from the database 
     private static final String[] PROJECTION = 
     { 
       ContactsContract.Contacts._ID,// _ID is always required 
       ContactsContract.Contacts.DISPLAY_NAME_PRIMARY, // that's what we want to display 
     }; 

     // and name should be displayed in the text1 textview in item layout 
     private static final String[] FROM = { ContactsContract.Contacts.DISPLAY_NAME_PRIMARY }; 
     private static final int[] TO = { android.R.id.text1 }; 

     @Override 
     public Loader<Cursor> onCreateLoader(int id, Bundle args) 
     { 
       // load from the "Contacts table" 
       Uri contentUri = Contacts.CONTENT_URI; // no sub-selection, no sort order, simply every row // projection says we want just the _id and the name column 
       return new CursorLoader(getActivity(), contentUri, PROJECTION, null, null, null); 
     } 

     @Override 
     public void onLoadFinished(Loader<Cursor> loader, Cursor data) 
     { 
       // Once cursor is loaded, give it to adapter 
       mAdapter.swapCursor(data); 
     } 

     @Override 
     public void onLoaderReset(Loader<Cursor> loader) 
     { 
       // on reset take any old cursor away 
       mAdapter.swapCursor(null); 
     } 

     @Override 
     public void onItemClick(AdapterView<?> p1, View p2, int p3, long p4) 
     { 
       // TODO: Implement this method 
     } 

} 

(感謝zapl)

有了這個列表視圖:

<ListView 
android:id="@+id/list" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" /> 

我的問題很簡單:列表視圖是空的!我做了什麼?錯誤的XML?或缺少什麼?

預先感謝您。

廠家批號 Lolxdfly

==========編輯=========== 我是新來的Java ..我一定打電話給活動在我主要活動? :S也許這就是錯誤.. 我曾嘗試以下:

ContactsFragment fragment = new ContactsFragment(); 
fragmentTransaction.add(R.id.list, fragment); 
fragmentTransaction.commit(); 

這讓我的應用程序崩潰:

java.lang.UnsupportedOperationException:addView(查看)未在適配器視圖

支持
+0

那麼控制活動的Java源代碼如何?你的適配器是什麼樣的。這比XML更可能是問題。順便說一句,直接發佈您的代碼,因爲鏈接可能被破壞。 – 2014-10-31 01:24:11

+0

我很抱歉的鏈接,但我從我的手機寫..我不能按CTRL + K,我不能使用編輯器....:/ – lolxdfly 2014-10-31 10:28:39

回答

0

嘗試設置添加on​​CreateView:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
View view = inflater.inflate(R.layout.your_own_custon_layout, container, false); 
return view; 
} 

之後,將佈局中的ID更改爲android:id="@android:id/list"

+0

我在我的ContactsFragment類中添加了此方法,但不修復它。 – lolxdfly 2014-10-31 12:02:22

+0

也許你忘了更改ListView的ID在片段的佈局。 我複製了所有的代碼,並且所有這些更改都正常工作。 看看如何在這裏使用片段:http://www.vogella.com/tutorials/AndroidFragments/article.html – QArea 2014-11-03 09:53:53