【问题标题】:update text of TextView inside current page of ViewPager from Activity从 Activity 更新 ViewPager 当前页面内 TextView 的文本
【发布时间】:2013-12-21 06:06:49
【问题描述】:

我正在使用 ViewPager 和 Fragment 来显示来自 sqlite 的数据。所有页面的内容都是相同的,所以我对所有页面都使用了相同的 Fragment 类。在片段中有一个 TextView。而且Activity中有两个Button。

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

注意:按钮在Activity中(所有页面通用)

问题 当我按下按钮时,它将更新下一页的文本视图。例如。当我单击 page1 中的按钮时,page2 的 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());
    }

}

【问题讨论】:

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


    【解决方案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);
    }
    

    然后在Activity中-

    public void onClick(View v) {
        if (v == btnMinus) {
    
            adapter.getCurrentFragment().onMinusClick(edtAmount.getText().toString());
        } else if (v == btnPlus) {
    
            adapter.getCurrentFragment().onPlusClick(edtAmount.getText().toString());
        }
    
    }
    

    【讨论】:

    • 那么我应该在哪里写这行onClick = (onButtonClick) fragment;
    • 这个加号和减号按钮处于活动状态,无论哪个片段可见,您都想更改它的文本???
    • 如果是这种情况,那么您需要对当前片段的引用并在其上调用 onMinusClick 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多