所以基本上片段是通过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。这是针对搜索功能的:)
答案 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(
)方法创建(您在设备屏幕上看到的内容)。