从Parent为Fragment的ListView设置适配器

时间:2015-07-17 20:29:58

标签: android listview android-fragments android-activity android-listview

所以基本上片段是通过ViewPager放在Activity中的,我试图通过从Parent Activity中填充它来填充片段内的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);
}

我只想填充片段中的listview,其中包含父活动生成的值。我如何做到这一点?

修改

基本上,ACTIVITY有一个EditText,下面我有一个带有两个片段的ViewPager。第一个片段有一个ListView。 'On Text changed'我需要用数据填充ListView。这是针对搜索功能的:)

2 个答案:

答案 0 :(得分:1)

有很多方法可以实现ListView的初始化。

首先:从Fragment onCreateView中初始化它,因为ListView属于Fragment,让它处理它是有意义的。

第二次:将您的数据添加到Bundle并使用Fragment中的setArguments()方法将其添加到Fragment,然后在onCreate()内部检索{{ 1}}和您附加的数据。

第三次:保存您的片段列表,将其保存在Bundle内的getItem()内。当您需要初始化/更新ListView适配器时,您可以检索FragmentPagerAdapter并调用由您创建的方法来初始化/更新ListView。

希望这有帮助!

编辑:

假设您有一个Fragment,并且在TextView方法上执行以下操作:

TextWatcher#afterTextChanged()

// This adapter should be your custom adapter -- extending FragmentPagerAdapter YourFragment fragment = (YourFragment) mViewPagerAdapter.getFragment(targetFragmentPostion); fragment.addNewData(yourNewData); 内部,您可以使用以下内容:

YourFragment#addNewData(...)

我假设您在初始化ListView方面取得了成功,因此此编辑的内容用于更新其内容。

希望这会对你有所帮助。

答案 1 :(得分:0)

我不确定,没有Fragment代码的实际实现是什么,但是你描述它不起作用的方式,因为你在onCreate()的Activity中夸大片段的视图膨胀该视图xml,但实际的片段视图将在片段onCreateView()上呈现。

因此,在您的情况下,您必须通过bundle或任何其他方法将适配器数据从Activity传递到Fragment,然后在Fragment的onCreateView()内填充您的视图。

简单来说,根据您当前的实现,两个视图都不同,因此它不会影响或更新您的Fragment视图。实际的片段视图仅由onCreateView()方法创建(您在设备屏幕上看到的内容)。