所以我尝试在按下另一个片段中的按钮后在EditText字段中添加Text后,在一个片段中填充ListView。
我的java编码技巧非常糟糕,所以任何代码建议都会对我有所帮助。
我希望这是有道理的。
这是我的代码。
public class FieldsActivity extends FragmentActivity {
private static final int NUMBER_OF_PAGES = 3;
ViewPager mPager;
MyFragmentPagerAdapter mMyFragmentPagerAdapter;
ArrayList<String>siteList = new ArrayList<String>();
CustomAdapter ca = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.fields);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.topbar);
mPager = (ViewPager) findViewById(R.id.fieldspager);
mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mMyFragmentPagerAdapter);
mPager.setCurrentItem(1);
}
我的ListView在哪里。
public class AddSite extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
RelativeLayout mRelativeLayout = (RelativeLayout) inflater.inflate(R.layout.add_site, container, false);
Button addSiteButton = (Button) mRelativeLayout.findViewById(R.id.addSiteButton);
addSiteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mPager.setCurrentItem(2, true);
}
});
ListView lv = (ListView) findViewById(android.R.id.list);
CustomAdapter ca = new CustomAdapter();
lv.setAdapter(ca);
return mRelativeLayout;
}
class CustomAdapter extends ArrayAdapter<String> {
CustomAdapter() {
super(FieldsActivity.this, android.R.layout.simple_list_item_1, siteList);
}
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater=getLayoutInflater();
row = inflater.inflate(R.layout.list_row, null);
}
((TextView)row.findViewById(R.id.textViewId)).setText(siteList.get(position));
}
return row;
}
}
Button和EditText的位置。
public class CreateSite extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
RelativeLayout mRelativeLayout = (RelativeLayout) inflater.inflate(R.layout.main, container, false);
final EditText siteEditText = (EditText)findViewById(R.id.siteEditText);
Button signInButton = (Button) mRelativeLayout.findViewById(R.id.sign_in_button);
signInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) { //Click this button and add to ListView in class AddSite
siteList.add(0, siteEditText.getText().toString());
ca.notifyDataSetChanged(); //(Bundle) cannot be applied
siteEditText.setText("");
mPager.setCurrentItem(1, true);
}
});
return mRelativeLayout;
}
}
全部在FragmentPagerAdapter
中private class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0: return new SettingFields();
case 1: return new AddSite();
case 2: return new CreateSite();
}
return null;
}
@Override
public int getCount() {
return NUMBER_OF_PAGES;
}
}
}
所以我评论了显示的错误。
希望这是有道理的。 如果您需要查看其他任何内容,请与我们联系。
提前致谢!
答案 0 :(得分:1)
你的碎片不应该直接相互对话。相反,每个片段都应该报告Activity,而Activity可以决定如何处理该操作。
执行此操作的常规方法是让Fragment定义一个接口,并让Activity实现该接口。然后在Activity上有一个Fragment可以调用的方法。然后,Activity可以调用另一个Fragment上的方法,使其执行某些操作。
请参阅Fragment communication上的文档。