刷新基于按钮单击片段浏览 [英] Refresh Fragment Views based on Button Click

查看:159
本文介绍了刷新基于按钮单击片段浏览的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个片段(标签)共享一些数据。当一个人改变了数据,我想有其他选项卡上反映出来。我研究这个StackOverflow上,我认为相关答案有一个 .notifyDataSetChanged()呼叫做的,但我不能使它工作。下面是相关的code ...

I have 2 fragments (tabs) that share some data. When one changes the data, I'd like to have that reflected on the other tab. I researched this on stackOverflow and I think the relevant answer has to do with a .notifyDataSetChanged() call, but I can't make it work. Here's the relevant code...

public class EnterCourseData extends FragmentActivity implements ActionBar.TabListener {

private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
// Tab titles
private String[] tabs = { "Pars", "Handicaps" };
private int courseNumber, teeNumber;
private Tee tee;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_enter_tees);
    // Initilization
    Intent mIntent = getIntent();
    courseNumber = mIntent.getIntExtra("courseNumber",0);
    Course course = Global.getCourse(courseNumber);
    teeNumber = mIntent.getIntExtra("teeNumber",0);
    tee = course.getTee(teeNumber);

    viewPager = (ViewPager) findViewById(R.id.pager);
    actionBar = getActionBar();
    mAdapter = new TabsPagerAdapter(getSupportFragmentManager(), courseNumber, teeNumber);

    viewPager.setAdapter(mAdapter);
    actionBar.setHomeButtonEnabled(false);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);        

    // Adding Tabs
    for (String tab_name : tabs) {
        actionBar.addTab(actionBar.newTab().setText(tab_name)
                .setTabListener(this));
    }
    /**
     * on swiping the viewpager make respective tab selected
     * */
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageSelected(int position) {
            // on changing the page
            // make respected tab selected
            actionBar.setSelectedNavigationItem(position);
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });
}

和进一步回落,这里要说的是就必须刷新onClick的方法...

and further down, here is the onClick method that necessitates the refresh...

public void savePars(View view){
    tee.setSlope(Integer.parseInt(((EditText) findViewById(R.id.enter_tee_slope)).getText().toString()));
    tee.setRating(Double.parseDouble(((EditText) findViewById(R.id.enter_tee_rating)).getText().toString()));
    mAdapter.notifyDataSetChanged();
}

下面是TabsPagerAdapter ...

Here is the TabsPagerAdapter...

public class TabsPagerAdapter extends FragmentPagerAdapter {
int courseNumber, teeNumber;

public TabsPagerAdapter(FragmentManager fm, int courseNumber, int teeNumber) {
    super(fm);
    this.courseNumber = courseNumber;
    this.teeNumber = teeNumber;
}

@Override
public Fragment getItem(int index) {

    switch (index) {
    case 0:
        // Par Entry activity
        Fragment parFragment = new ParFragment();
        Bundle args = new Bundle();
        args.putInt(ParFragment.ARG_COURSE_NUMBER, courseNumber);
        args.putInt(ParFragment.ARG_TEE_NUMBER, teeNumber);
        parFragment.setArguments(args);
        return parFragment;
    case 1:
        // Handicap Entry fragment activity
        Fragment hcpFragment = new HandicapFragment();
        args = new Bundle();
        args.putInt(HandicapFragment.ARG_COURSE_NUMBER, courseNumber);
        args.putInt(HandicapFragment.ARG_TEE_NUMBER, teeNumber);
        hcpFragment.setArguments(args);
        return hcpFragment;
    }

    return null;
}

@Override
public int getCount() {
    // get item count - equal to number of tabs
    return 2;
}

}

下面是一个片段...

Here is one Fragment...

public class ParFragment extends Fragment {
    public static final String ARG_COURSE_NUMBER = "courseNumber", ARG_TEE_NUMBER = "teeNumber";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_par, container, false);
        Bundle args = getArguments();
        Course course = Global.getCourse(args.getInt(ARG_COURSE_NUMBER));
        ((TextView) rootView.findViewById(R.id.display_course_name)).setText(course.getName());
        Tee tee = course.getTee(args.getInt(ARG_TEE_NUMBER));
        ((TextView) rootView.findViewById(R.id.display_tee_name)).setText(tee.getTeeName());
        ((TextView) rootView.findViewById(R.id.enter_tee_slope)).setText(Integer.toString(tee.getSlope()));
        ((TextView) rootView.findViewById(R.id.enter_tee_rating)).setText(Double.toString(tee.getRating()));

        return rootView;
    }
}

这是其他......

And here is the other...

public class HandicapFragment extends Fragment {
    public static final String ARG_COURSE_NUMBER = "courseNumber", ARG_TEE_NUMBER = "teeNumber";


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_handicap, container, false);
        Bundle args = getArguments();
        Course course = Global.getCourse(args.getInt(ARG_COURSE_NUMBER));
        ((TextView) rootView.findViewById(R.id.display_course_name)).setText(course.getName());
        Tee tee = course.getTee(args.getInt(ARG_TEE_NUMBER));
        ((TextView) rootView.findViewById(R.id.display_tee_name)).setText(tee.getTeeName());
        ((TextView) rootView.findViewById(R.id.enter_tee_slope)).setText(Integer.toString(tee.getSlope()));
        ((TextView) rootView.findViewById(R.id.enter_tee_rating)).setText(Double.toString(tee.getRating()));

        return rootView;
    }

}

在单击该按钮,我想保存的价值,我想这些值显示在​​另一个片段。

When the button is clicked, I want to save the values and I want these values to show up on the other fragment.

帮助一个小白了。

感谢

推荐答案

您需要的碎片之间的沟通,但片段不能直接与其它片段沟通,所有的通信应该通过持有这些片段的活性来完成。

You need to communicate between fragments, but a fragment cannot directly communicate with other fragment, all the communication should be done through the activity which holds these fragments.

要遵循的步骤如下:


  • 定义在你已经实现了onClickListener片段接口(让它片段A)

  • Define an Interface in the fragment where you have implemented the onClickListener (let it be Fragment A)

实施持有这些片段的活性界面

Implement the Interface in the activity which holds these fragments

在覆盖的方法,从viewpager适配器检索片段实例,并通过调用它的公共方法邮件传递到片段B。

In the method overridden, retrieve the fragment instance from the viewpager adapter and deliver a message to Fragment B by calling it's public methods.

答案检索适配器片段实例

有关与其他片段,通信的更多详情,请参阅这里

这篇关于刷新基于按钮单击片段浏览的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆