0

我有有ViewPager主要活动里面,这ViewPager里面我插两个片段:获得来自片段的按钮ID的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; 
    }