2013-12-17 2 views
1

У меня есть MainActivity, который имеет ViewPager с 3 фрагментами (Fraga, FragB, FragC)Добавление Целые из различных фрагментов в ViewPager

В Fraga, я объявлен Int А = 10; В FragB я объявил int b = 20; В FragC у меня есть TextView и кнопка

Теперь все, что я хочу сделать, это то, что когда я нажимаю кнопку на FragC, она добавит int a и int b из FragA и FragB, и сумма будет отображение на TextView в FragC

Вот мой текущий код:

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

} 

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

     } 
    }; 

} 

ответ

1

Используйте свою активность, чтобы помочь вашим фрагментам общаться ... Например:

Добавить метод getter для возврата целочисленного значения каждого фрагмента. Добавить общественную Струнный сумму() метод для вашей деятельности, которая будет что-то вроде:

общественного класса 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; 
    } 
} 

}

В вашем методе OnClick() в fragC(), все, что вам нужно сделать, это установить текстовое значение этой суммы, когда происходит событие клик ->

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

Моя скобка может быть откусил, но вот общая идея.

Edit:

public class FragA extends Fragment { 

int a = 10; 

public int getInt(){ 
    return a; 
} 
+0

Пожалуйста, вы можете научить меня, как добавить метод получения возвращать целое значение каждого фрагмента ? Потому что я получаю сообщение об ошибке в строке «return Integer.toString (FragA.getInt() + FragB.getInt()); говоря: «Метод getInt() не определен для типа FragA», а также в FragB – speedsir

+0

Его довольно простой ... просто добавление метода. См. Править. – Submersed

+0

В этой же строке произошла новая ошибка «return Integer.toString (FragA.getInt() + FragB.getInt()); говоря: «Невозможно сделать статическую ссылку на нестатический метод getInt() из типа FragA» также в FragB. Извините, я не специалист по ошибкам. – speedsir

0

решаемые его.Благодаря Submersed

Фраги

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, когда я нажимаю на кнопку «Добавить»:

enter image description here

Смежные вопросы