在Dialog解除后更新ListView(在片段中)

时间:2013-05-10 18:19:43

标签: android

我已经读过一些关于这类问题的问题,但我无法解决。

我有这个:

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我需要向右或向左滑动两次并返回(以这种方式重新创建片段以便所有工作细)。

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

提前致谢。

抱歉我的英语不好......

1 个答案:

答案 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时更新。