使用Android相同的片段多次 - 如何有不同的onclick行动
问题描述:
可以说我有一个片段MyFragment和我创建myFragment1和myFragment2。两者共享相同的xml布局,这只是一个图像按钮。使用onClick,我该如何做到这一点,以便点击任一按钮不会做同样的事情?使用Android相同的片段多次 - 如何有不同的onclick行动
例如,如果我想myFragment1的按钮,进入到活动A,我想myFragment2的按钮,进入到活动B.下面
示例代码:
public class MyFragment extends Fragment implements View.OnClickListener{
ImageButton myButton;
View view;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_device, container, false);
myButton = (ImageButton) view.findViewById(R.id.myButton);
myButton.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v){
//do something
}
}
从我MainActivity
:
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
LinearLayout windowForMainActivity = (LinearLayout) findViewById(R.id.windowForMainActivity);
MyFragment myFragment1 = new MyFragment();
fragmentTransaction.add(windowForMainActivity.getId(),myFragment1);
MyFragment myFragment2 = new MyFragment();
fragmentTransaction.add(windowForMainActivity.getId(),myFragment2);
fragmentTransaction.commit();
}
}
答
由于您已使课程实现了界面,因此在创建片段时,可以覆盖onClick
。
MyFragment frag1 = new MyFragment() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, ActivityA.class);
MainActivity.this.startActivity(i);
}
};
MyFragment frag2 = new MyFragment() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, ActivityB.class);
MainActivity.this.startActivity(i);
}
};
当然,也有可能是更好的方式来做到这一点本身使用Bundle arguments,例如片段类中。
答
从您的活动首先将数据发送到片段这样
Bundle bundle = new Bundle();
bundle.putString("some_value", "ActivityA");
MyFragment myFragment1 = new MyFragment();
myFragment1.setArguments(bundle);
fragmentTransaction.add(windowForMainActivity.getId(),myFragment1);
Bundle bundle2 = new Bundle();
bundle2.putString("some_value", "ActivityB");
MyFragment myFragment2 = new MyFragment();
myFragment2.setArguments(bundle);
fragmentTransaction.add(windowForMainActivity.getId(),myFragment2);
,然后得到这样
String whichActivity;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
whichActivity = getArguments().getString("some_value");
return inflater.inflate(R.layout.fragment, container, false);
}
@Override
public void onClick(View v){
if(whichActivity.equals("ActivityA")){
//code to start Activity A
}else{
//code to start activity B
}
}
值