0

我已经阅读了一些关于此类问题的问题,但我无法解决。

我有这个:

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 查询)单击项目的值之一。一切正常,除了片段的更新。更新查询没问题(关闭对话框时数据库是最新的),但是要更新片段,我需要向右或向左滑动两次并返回(通过这种方式重新创建片段,所以一切正常美好的)。

我如何强制更新/重新创建片段?

提前致谢。

对不起,我的英语不好...

4

1 回答 1

0

通常,当使用多个实例时Fragment(我猜您是基于向左滑动/向右滑动评论),您不想像使用Intent活动一样使用 an 更新内容,而是使用Interface.

如果数据来自Fragment同一活动托管的另一个,例如在一个ViewPager或选项卡设置中,您将在信息发送片段和主机活动之间设置一个接口,然后调用公共方法从内部更新接收片段主机活动。可以在此处找到使用接口更新片段的基础知识。我不知道你整个项目的细节,但我会调查一下。

至于发布的内容:

您的代码行为getItem不正确,因为在这种情况下不正确。当您通过传递意图来更新信息并需要检索Bundle您应该使用的新信息时

 @Override
protected void onNewIntent(Intent intent) {
    // TODO Auto-generated method stub
    super.onNewIntent(intent);
} 

您可能必须设置一个活动标志才能使其正常工作(例如 FLAG_ACTIVITY_SINGLE_TOP),但基本上这个想法是onNewIntent在将新意图传递给您的活动时更新。现在使用getItem它只会在最初创建片段并设置参数时更新。

于 2013-05-10T19:00:13.723 回答