假设我有一个 fragment MyFragment,我创建了 myFragment1 和 myFragment2。两者共享相同的 xml 布局,这只是一个图像按钮。使用 onClick,我怎样才能使单击任一按钮不会执行相同的操作?
例如,如果我希望 myFragment1 的按钮转到 Activity A,并且我希望 myFragment2 的按钮转到 Activity 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
}
}
来 self 的 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();
}
}
最佳答案
首先从您的 Activity 中将数据发送到这样的 fragment
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
}
}
关于Android 多次使用相同的 fragment - 如何有不同的点击 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40940542/