我已经读过一些关于这类问题的问题,但我无法解决。
我有这个:
public class Classwork extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_homework);
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
}
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a DummySectionFragment (defined as a static inner class
// below) with the page number as its lone argument.
Fragment fragment = new DummySectionFragment();
Bundle args = new Bundle();
args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1);
args.putInt("posizione", position);
fragment.setArguments(args);
return fragment;
}
@Override
public int getCount() {
//code for number of pages
}
@Override
public CharSequence getPageTitle(int position) {
//code for return the title
}
}
public class DummySectionFragment extends Fragment {
public static final String ARG_SECTION_NUMBER = "section_number";
public DummySectionFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//query to populate ListView
//ListView with CustomAdapter
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> myAdapter, View myView, int myItemInt, long mylng) {
//Start new activity DialogDeleteAddGradeCopy
}
});
myDbHelper.close();
return rootView;
}
}
}
我用Eclipse向导创建了它。 DummyFragment包含一个ListView,它使用SQLite查询填充(正确)。 单击ListView的项目,将显示“对话框”(实际上是具有对话框样式的活动)。
对话框:
public class DialogDeleteAddGradeCopy extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//retrive data form Intent for the update in the db
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//update the db
finish();
}
}
});
}
此对话框允许用户更新(使用db查询)所单击项目的值之一。 一切正常,除了片段的更新。更新查询正常(对话框关闭时db是最新的),但要更新Fragment我需要向右或向左滑动两次并返回(以这种方式重新创建片段以便所有工作细)。
如何强制更新/重新创建片段?
提前致谢。
抱歉我的英语不好......
答案 0 :(得分:0)
通常在使用Fragment
的多个实例时(我猜您是基于向左滑动/向右滑动注释),您不希望使用Intent
更新内容将使用活动,但使用Interface
。
如果数据来自同一活动托管的其他Fragment
,例如在ViewPager
或标签设置中,您将在信息发送片段和主机活动之间建立一个接口,然后调用公共方法从主机活动中更新reciving片段。 using an interface to update fragments的基础知识可以在这里找到。我不知道你整个项目的细节,但我会调查一下。
至于发布的内容:
您的代码行为不正确,因为getItem
在此上下文中不正确。当您通过传递意图更新信息并需要检索新的Bundle
信息时,您应该使用
@Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
}
您可能必须设置一个活动标志才能使其生效(例如FLAG_ACTIVITY_SINGLE_TOP),但基本上,当新意图传递给您的活动时,我们会更新onNewIntent
这个想法。现在使用getItem
只会在最初创建片段并设置args时更新。