Android 多次使用相同的 fragment - 如何有不同的点击 Action

标签 android android-fragments

假设我有一个 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/

相关文章:

java - 多次恢复时 Activity 滚动不流畅

android - 在 fragment 页面适配器中重用 fragment

android - 我可以对位图进行 Activity 吗?

Android - 同屏ListFragments

android - 使用 FragmentPagerAdapter 时如何将 onClick 事件从 fragment 传播到 Activity ?

android - 单击按钮更改 Activity 时找不到源错误

android - 地理围栏转换服务和唤醒锁

android - 错误代码:2 Unexpected Top-level Exception

android - Mapsforge 的 fragment 支持

android - 尽管在 onDestroyView 中将父 View 设置为 null,但 fragment View 内存泄漏