从Activity中更新ViewPager当前页面内的TextView文本

时间:2013-12-21 06:06:50

标签: android android-fragments android-activity android-viewpager

我正在使用ViewPager和Fragment来显示来自sqlite的数据。所有页面的内容都相同,因此我对所有页面都使用了相同的Fragment类。在片段中有一个TextView。活动中有两个按钮。

我正在尝试在从Activity中单击任何Button时更新TextView的文本。为此,我使用interface并覆盖片段中的方法。一切正常。

注意:按钮位于“活动”中(所有页面都是通用的)

问题 当我按下按钮时,它将更新下一页的文本视图。例如。当我点击第1页的按钮时,第2页的textview将会更新,等等。

我使用了以下代码。任何帮助将是欣赏。感谢。

片段代码

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // Create a new TextView and set its text to the fragment's section
    // number argument value.
    View view = inflater.inflate(R.layout.fragmentview, container, false);
    txtAmount = (TextView) view.findViewById(R.id.txtAmount);

    return view;
}

@Override
public void onPlusClick(String amount) {
    // update textview here

}

@Override
public void onMinusClick(String amount) {
    // update textview here

}

适配器代码

@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 DummyFragment();

        onClick = (onButtonClick) fragment;

        return fragment;
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return arrModel.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {

        return arrModel.get(position).fname;
    }

活动代码

@Override
public void onClick(View v) {
    if (v == btnMinus) {

        onClick.onMinusClick(edtAmount.getText().toString());
    } else if (v == btnPlus) {

        onClick.onPlusClick(edtAmount.getText().toString());
    }

}

1 个答案:

答案 0 :(得分:1)

每次调用getItem时,您都会创建一个新片段,并将其分配给onClick,以便onClick引用最新的片段,在您的情况下为第二个片段。

尝试在适配器的构造函数中创建片段列表:

List<Fragment> fragments=new List<Fragment>(); 
Fragment currentFragment;
public Myadapter(){
       fragments.add(new DummyFragment());
       fragments.add(new DummyFragment());
} 
@Override
public Fragment getItem(int position) {
   return fragments.get(position);
}

public Fragment getCurrentFragment(){

    return currentFragment;
}

@Override
public void setPrimaryItem(ViewGroup container, int position,
                Object object) {
       super.setPrimaryItem(container, position, object);
       currentFragment=fragments.get(position);
}

然后在活动 -

public void onClick(View v) {
    if (v == btnMinus) {

        adapter.getCurrentFragment().onMinusClick(edtAmount.getText().toString());
    } else if (v == btnPlus) {

        adapter.getCurrentFragment().onPlusClick(edtAmount.getText().toString());
    }

}