簡體   English   中英

從父級為片段的Lis​​tView設置適配器

[英]Set Adapter for Fragment's ListView from Parent

因此,基本上,片段是通過ViewPager放置在Activity內的,而我試圖通過從父活動中將其填充來填充Fragment內的ListView。 但是,不會填充這些項目,並且不會引發任何錯誤。

數據應從活動中填充

listview在片段中

這是我的代碼:

活動內容

public class SearchActivity extends ActionBarActivity {

ListView peopleList;
ArrayList<String> data = new ArrayList<>();

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search);

        //Inflate the Fragment to a new View Object
        LayoutInflater inflator = (LayoutInflater) this .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View vii = inflator.inflate(R.layout.activity_search_people_tab, null);
        //Initialise the ListView with the Fragment's listview
        peopleList = (ListView) vii.findViewById(R.id.searchpeople_list);

        data.add("1");         
        data.add("2");     

        PopulateResults();
}

private void PopulateResults() {
        //populate the fragment's listview with the data generated by the parent activity
        SearchPeopleResultsAdapter adapter = new SearchPeopleResultsAdapter(SearchActivity.this,data);
        peopleList.setAdapter(adapter);
}

我只是想用父活動生成的值填充片段中的列表視圖。 我該如何做到這一點呢?

編輯:

因此,基本上,ACTIVITY具有一個EditText,在其下方,我具有一個帶有兩個片段的ViewPager。 第一個片段具有一個ListView。 “文字已更改”我需要用數據填充ListView。 這是為了搜索功能:)

您可以通過多種方法來實現ListView的初始化。

首先 :由於ListView屬於Fragment,因此可以在Fragment onCreateView對其進行初始化,讓它進行處理很有意義。

第二 :將數據添加到Bundle ,然后使用Fragment中的setArguments()方法將其添加到Fragment中,然后在onCreate()內部檢索Bundle和您附加的數據。

第三 :保存碎片的列表,從內保存它們getItem()的內部FragmentPagerAdapter 當您需要初始化/更新ListView適配器時,可以檢索Fragment並調用您創建的方法來初始化/更新ListView。

希望這可以幫助!

編輯:

假設您有一個TextView並在其TextWatcher#afterTextChanged()方法上執行以下操作:

// This adapter should be your custom adapter -- extending FragmentPagerAdapter
YourFragment fragment = (YourFragment) mViewPagerAdapter.getFragment(targetFragmentPostion);
fragment.addNewData(yourNewData);

YourFragment#addNewData(...)方法中,您可能會遇到類似以下內容的情況:

mListOfData.add(newData);
mListViewAdapter.notifyDataSetChanged();

我假設您已成功完成ListView的初始化,所以此編輯后的內容用於更新其內容。

希望這對您有所幫助。

我不確定在沒有片段代碼的情況下您實際的實現是什么,但是您描述它的方式不起作用,因為您通過在活動的onCreate()中膨脹該視圖的xml而不是實際的片段視圖來膨脹一個片段的視圖將在片段的onCreateView()上呈現。

因此,在您的情況下,您必須通過捆綁軟件或任何其他方法將適配器數據從Activity傳遞到Fragment,然后僅在Fragment的onCreateView()中填充視圖。

簡而言之,根據您當前的實現,這兩種視圖都是不同的,因此不會影響或更新您的Fragment視圖。 實際的片段視圖僅通過onCreateView( )方法(在設備屏幕上看到的)創建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM