java - 在 ViewPager 中添加来自不同 fragment 的整数

标签 java android android-fragments android-viewpager

我有一个 MainActivity,它有一个带有 3 个 fragment 的 ViewPager(FragAFragBFragC)

在 FragA 中,我声明了一个 int a = 10; 在 FragB 中,我声明了一个 int b = 20; 在 FragC 中,我有一个 TextView 和一个 Button

现在,我想要做的就是当我点击 FragC 上的按钮时,它将添加来自 FragA 和 FragB 的 int a 和 int b,并且总和将显示在 FragC 的 TextView 上

这是我当前的代码:

MainActivity.java

public class MainActivity extends FragmentActivity {

    ViewPager viewPager = null; 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        viewPager = (ViewPager)findViewById(R.id.pager);    
        FragmentManager fragmentManager = getSupportFragmentManager();
        viewPager.setAdapter(new MyAdapter(fragmentManager));
    }

public class MyAdapter extends FragmentStatePagerAdapter {  

        public MyAdapter (FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int i) {
            Fragment fragment = null;

            if (i == 0)
            {
                fragment = new FragA();
            }
            if (i == 1)
            {
                fragment = new FragB();
            }
            if (i == 2)
            {
                fragment = new FragC(); 
            }
            return fragment;
        }

        @Override
        public int getCount() {
            return 3;
        }   
    }

}

ma​​inactivity.xml

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

</android.support.v4.view.ViewPager>

fragment A

public class FragA extends Fragment{

    int a = 10;

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

        return inflater.inflate(R.layout.fraga, container, false); 
    }

}

fragment B

public class FragB extends Fragment{

        int b = 20;

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

            return inflater.inflate(R.layout.fragb, container, false); 
        }

    }

fragment C

public class FragC extends Fragment{

    Button button;
    TextView textView;

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

        View v = inflater.inflate(R.layout.fragc, container, false); 

        textView = (TextView)v.findViewById(R.id.textview);
        button = (Button)v.findViewById(R.id.button);
        button.setOnClickListener(Click);

        return v;
    }

    OnClickListener Click = new OnClickListener() { 

        @Override
        public void onClick(View v) {

        }
    };

}

最佳答案

使用您的 Activity 来帮助您的 fragment 进行交流...例如:

添加一个 getter 方法来返回每个 fragment 的整数值。将 public String sum() 方法添加到您的 Activity 中,类似于:

公共(public)类 MainActivity 扩展 FragmentActivity {

ViewPager viewPager = null; 
MyAdapter adapter = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    viewPager = (ViewPager)findViewById(R.id.pager);    
    myAdapter = new MyAdapter(getSupportFragmentManager());
    viewPager.setAdapter(myAdapter);
}


public String sum(){
    return Integer.toString(((FragA)myAdapter.getItem(0)).getInt() + ((FragB)myAdapter.getItem(1)).getInt());
}

public class MyAdapter extends FragmentStatePagerAdapter {  
    public MyAdapter (FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        Fragment fragment = null;

        if (i == 0)
        {
            fragment = new FragA();
        }
        if (i == 1)
        {
            fragment = new FragB();
        }
        if (i == 2)
        {
            fragment = new FragC(); 
        }
        return fragment;
    }

    @Override
    public int getCount() {
        return 3;
    }   
}

在 fragC() 中的 onClick() 方法中,您需要做的就是在发生点击事件时将文本值设置为此总和 ->

textView.setText(((MainActivity)getActivity()).sum());

我的括号可能有点偏离,但这是总体思路。

编辑:

public class FragA extends Fragment {

int a = 10;

public int getInt(){
   return a;
}

关于java - 在 ViewPager 中添加来自不同 fragment 的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20641889/

相关文章:

java - 如何获取 div 中子项的计数甚至文本列表

java - 使用埃拉托色尼筛法寻找第 n 个素数

Java:如何模拟 XInput 游戏 handle / Controller ?

java - Swing:一列的多个 CellEditor

android - Caused by : java. lang.IllegalStateException: Fragment already added

android - 如何在android中使用外部数据库

android - 使用 gridlayoutmanager 在 recyclerview 中查看位置

android - 尝试加载资源时,MediaMetadataRetriver.setDataSource在发行时崩溃(状态= 0x80000000)

android - fragment 在 viewpager 中对用户可见之前初始化

添加 androidx.fragment :fragment-testing dependency 后,AndroidTests 停止构建