【问题标题】:Adding Integers from Different Fragments in a ViewPager在 ViewPager 中添加来自不同片段的整数
【发布时间】:2013-12-17 18:26:27
【问题描述】:

我有一个 MainActivity,它的 ViewPager 有 3 个片段(FragAFragBFragC)

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

现在,我要做的是,当我单击 FragC 上的 Button 时,它将添加来自 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>

FragA

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); 
    }

}

FragB

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); 
        }

    }

FragC

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) {

        }
    };

}

【问题讨论】:

    标签: java android android-fragments android-viewpager


    【解决方案1】:

    使用您的活动来帮助您的片段进行交流...例如:

    添加一个 getter 方法来返回每个片段的整数值。向您的活动添加一个公共 String sum() 方法,类似于:

    公共类 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;
    }
    

    【讨论】:

    • 你能教我如何添加一个getter方法来返回每个片段的整数值吗?因为我在“return Integer.toString(FragA.getInt() + FragB.getInt());”行中遇到错误说“FragA 类型的方法 getInt() 未定义”,并且在 FragB 中也是如此
    • 它很简单...只是添加一个方法。见编辑。
    • 同一行出现新错误“return Integer.toString(FragA.getInt() + FragB.getInt());”同样在 FragB 中说“无法从类型 FragA 对非静态方法 getInt() 进行静态引用”。抱歉,我不是错误专家..
    • 仍然出现同样的错误。但我解决了。我将 FragA 和 FragB 设置为这些片段的新对象。谢谢你,我解决了。我已经被这个问题困扰了大约一个月。哈哈。非常感谢楼主!
    【解决方案2】:

    解决了。感谢淹没

    FragA

    public class FragA extends Fragment{
    
        int a = 10;
    
        public int getInt() {
    
            return a;
        }
     ....
    

    FragB

    public class FragB extends Fragment{
    
            int b = 20;
    
            public int getInt() {
    
                return b;
            }
    ....
    

    MainActivity

    public String sum() {
    
        FragA FragA = new FragA();
        FragB FragB = new FragB();
    
        return Integer.toString(FragA.getInt() + FragB.getInt());
    }
    

    FragC

    OnClickListener Click = new OnClickListener() { 
    
            @Override
            public void onClick(View v) {
    
                textView.setText(((MainActivity)getActivity()).sum());
    
            }
        };
    

    当我点击“添加”按钮时,我的 textView 上的输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多