2013-11-14 26 views
1

我是Android開發的初學者。 對於一個項目,我想知道如何實現一個listview到一個片段?如何實現一個listview到一個片段?

在我的項目中,我有3個片段。

我必須檢索手機中的所有聯繫人。 (我正在使用這個例子=>http://samir-mangroliya.blogspot.fr/p/android-read-contact-and-display-in.html)。 然後,我將它們放入一個包含listview的片段中。

我在尋找很多例子,但它只是列表視圖到ACTIVITY的例子。

你能幫我嗎?

最好的問候,

Tofuw

PS:對不起,我的英語不好,我是法國人:/

編輯

這裏是我的代碼:

public class PhoneFrag extends ListFragment 
{ 
private List<Contact>listecontact=new ArrayList<Contact>(); 

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
} 

public void onActivityCreated(Bundle savedInstanceState, Context context) 
{ 
    super.onActivityCreated(savedInstanceState); 

    String[]values=new String[]{}; 

    Cursor phones=context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null); 

    while(phones.moveToNext()) 
    { 
     String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
     String num=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

     Contact contact=new Contact(); 
     contact.setName(name); 
     contact.setNum(num); 

     listecontact.add(contact); 
    } 
    phones.close(); 

    ArrayAdapter<String>adapter=new ArrayAdapter<String>(getActivity(), android.R.layout.simple_expandable_list_item_2, listecontact); 
    setListAdapter(adapter); 
} 

我有一個錯誤在倒數第三行:

構造ArrayAdapter(FragmentActivity,INT, 列表)是未定義

你能幫助我嗎?

Tofuw

+2

爲什麼不直接使用ListFragment? HTTP://計算器。com/questions/6510550/android-listview-in-fragment – Neil

+0

與Activty中的相同。建立你的XML。使用ListView lv =(ListView)fragmentRootView.findViewById(R.id.your_list_view)獲取ListView中的ListView實例;'我看不到您的問題 –

+0

您好,感謝您的回答!我正在使用ListFragment :) – Tofuw

回答

3

獲取。如果你已經使用或看着實例與ListActivity沒有必要對這個片段用setContentView(layout)了一個XML佈局文件關聯的片段,延長ListFragment而不是Fragment,Android的創建了一個現成的Fragment與內它ListView您conveniance.Instead爲了方便地使用方法,如setListAdapter(adapter)可供you.However,如果你想訪問ListView實例使用getListView() .The片段似乎用onActivityCreated做到這一點:

我在猜測,你知道碎片已經足夠了解thisListActivity的意思是getActivity()在你的ListFragment中。

下面是我在Android Fragment Documentation找到的代碼:

public static class TitlesFragment extends ListFragment { 
boolean mDualPane; 
int mCurCheckPosition = 0; 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    // Populate list with our static array of titles. 
    setListAdapter(new ArrayAdapter<String>(getActivity(), 
      android.R.layout.simple_list_item_activated_1, Shakespeare.TITLES)); 

    // Check to see if we have a frame in which to embed the details 
    // fragment directly in the containing UI. 
    View detailsFrame = getActivity().findViewById(R.id.details); 
    mDualPane = detailsFrame != null && detailsFrame.getVisibility() == View.VISIBLE; 

    if (savedInstanceState != null) { 
     // Restore last state for checked position. 
     mCurCheckPosition = savedInstanceState.getInt("curChoice", 0); 
    } 

    if (mDualPane) { 
     // In dual-pane mode, the list view highlights the selected item. 
     getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
     // Make sure our UI is in the correct state. 
     showDetails(mCurCheckPosition); 
    } 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("curChoice", mCurCheckPosition); 
} 

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    showDetails(position); 
} 

/** 
* Helper function to show the details of a selected item, either by 
* displaying a fragment in-place in the current UI, or starting a 
* whole new activity in which it is displayed. 
*/ 
void showDetails(int index) { 
    mCurCheckPosition = index; 

    if (mDualPane) { 
     // We can display everything in-place with fragments, so update 
     // the list to highlight the selected item and show the data. 
     getListView().setItemChecked(index, true); 

     // Check what fragment is currently shown, replace if needed. 
     DetailsFragment details = (DetailsFragment) 
       getFragmentManager().findFragmentById(R.id.details); 
     if (details == null || details.getShownIndex() != index) { 
      // Make new fragment to show this selection. 
      details = DetailsFragment.newInstance(index); 

      // Execute a transaction, replacing any existing fragment 
      // with this one inside the frame. 
      FragmentTransaction ft = getFragmentManager().beginTransaction(); 
      if (index == 0) { 
       ft.replace(R.id.details, details); 
      } else { 
       ft.replace(R.id.a_item, details); 
      } 
      ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
      ft.commit(); 
     } 

    } else { 
     // Otherwise we need to launch a new activity to display 
     // the dialog fragment with selected text. 
     Intent intent = new Intent(); 
     intent.setClass(getActivity(), DetailsActivity.class); 
     intent.putExtra("index", index); 
     startActivity(intent); 
    } 
} 

}

您也可以使用像setEmptyTextsetListShown方法來顯示的情況下,你的光標有沒有行的消息和切換您的listView的可見性。另外,Android的Loader Framework只支持庫中的片段而不支持Activity。

+0

感謝您的回答@ user2309862。但現在,我還有其他問題。你能幫我嗎 ?我會在下面發佈我的代碼,並更精確地詳細說明。 – Tofuw

相關問題