假设我有一个片段MyFragment,我创建了myFragment1和myFragment2。两者都共享相同的xml布局,这只是一个图像按钮。使用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();
}
}
答案 0 :(得分:1)
首先从你的活动中将数据发送到像这样的片段
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
}
}
答案 1 :(得分:0)