0

У меня есть основной вид деятельности, которые имеют ViewPager, внутри этой ViewPager я вставил два фрагмента:Получить идентификатор от кнопки фрагмента внутри ViewPager

public class MainActivity extends AppCompatActivity { 

    private Toolbar toolbar; 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 

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

     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     setupViewPager(viewPager); 

     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     MyFrag f1 = new MyFrag(); 
     MyFrag f2 = new MyFrag(); 

     adapter.addFragment(f1, "F1"); 
     adapter.addFragment(f2, "F2"); 

     viewPager.setAdapter(adapter); 
    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList(); 
     private final List<String> mFragmentTitleList = new ArrayList(); 

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

     @Override 
     public int getCount() { 
      return mFragmentList.size(); 
     } 

     public void addFragment(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 
} 

Тогда в MyFrag я хочу установить нажатием кнопки слушателя:

public class MyFrag extends Fragment{ 

    public void MyFrag(){ 

    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          final Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
     addFragment(new OtherFrag()); 

     Button btn = (Button) container.findViewById(R.id.btn);  

     btn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       addFragment(new MyOtherFrag()); 
      } 
     }); 

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

    } 

    public void addFragment(Fragment fragment){ 
     FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction(); 
     fragmentTransaction.add(R.id.fragContainer, fragment, "MyOtherFrag"); 
     fragmentTransaction.commit(); 
     getChildFragmentManager().executePendingTransactions(); 

    } 

проблема заключается в том Button btn = (Button) container.findViewById(R.id.btn); является недействительным, поскольку контейнер является ViewPager вместо фрагмента ... Как я получить мой фрагмент здесь?

+0

Какой макет имеет кнопку? Это макет деятельности? – Karakuri

ответ

0

В onCreateView фрагмента, изменения в этой

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          final Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.myfrag_fragment, container, false); 
     addFragment(new OtherFrag()); 

     Button btn = (Button) view.findViewById(R.id.btn);  

     btn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       addFragment(new MyOtherFrag()); 
      } 
     }); 

     return view; 

    } 
1

Чтобы получить доступ к кнопке из MyFrag макета фрагмента использовать тот же вид, который возвращается из onCreateView метода:

@Override 
    public View onCreateView(...) { 
     View view=inflater.inflate(R.layout.myfrag_fragment, container, false); 
     Button btn = (Button) view.findViewById(R.id.btn);  
     .... 

     return view; 
    } 
Смежные вопросы