2017-10-21 78 views
0

我的MainActivity包含用于切换到不同片段的按钮。每个片段内还有按钮。活动按钮onClickListener在分片中实现按钮onClickListener之前工作正常。我想知道这是不是由Android支持或我的代码是不正确的。 任何指针赞赏。谢谢。是否可以在Activity和Fragment中实现单独的按钮onclickListener?

片段代码:

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

    super.onCreate(savedInstanceState); 
    v = inflater.inflate(fragment1, container, false); 

    b2=(Button)v.findViewById(R.id.button2); 
    b2.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v){ 
      button2Clicked(v); 
     } 
    }); 
    return inflater.inflate(R.layout.fragment1, container, false); 
} 
public void button2Clicked(View view){ 
    //do something 
} 

活动码:

public class MainActivity extends FragmentActivity { 

private Button btnHealth; 
private Button btnSetting; 
private Button btnSleep; 


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

    //Init component 
    btnHealth = (Button) findViewById(R.id.btnHealth); 
    btnSleep = (Button) findViewById(R.id.btnSleep); 
    btnSetting = (Button) findViewById(R.id.btnSetting); 

    replaceFragment(1); 

    btnHealth.setOnClickListener(new AdapterView.OnClickListener(){ 
     @Override 
     //On click function 
     public void onClick(View view) { 
      replaceFragment(0); 
     } 
    }); 

    btnSleep.setOnClickListener(new AdapterView.OnClickListener(){ 
     @Override 
     //On click function 
     public void onClick(View view) { 
      replaceFragment(1); 
     } 
    }); 

    btnSetting.setOnClickListener(new AdapterView.OnClickListener(){ 
     @Override 
     //On click function 
     public void onClick(View view) { 
      replaceFragment(2); 
     } 
    }); 

} 


//Create method replace fragment 

private void replaceFragment(int pos) { 
    Fragment fragment = null; 
    switch (pos) { 
     case 0: 
      fragment = new Fragment1(); 
      break; 
     case 1: 
      fragment = new Fragment2(); 
      break; 
     case 2: 
      fragment = new Fragment3(); 
      break; 
     default: 
      fragment = new Fragment2(); 
      break; 
    } 

    if(null!=fragment) { 
     FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction transaction = fragmentManager.beginTransaction(); 
     transaction.replace(R.id.main_content, fragment); 
     transaction.addToBackStack(null); 
     transaction.commit(); 
    } 
} 


} 
+0

请给出投票的理由。 – Maggie

+0

你为什么要返回'inflater.inflate(R.layout.fragment1,container,false);'不是'View v'? –

+0

不要在Fragment中设置另一个侦听器,只需点击该按钮时从Activity中调用fragment button2Clicked() –

回答

相关问题