Android多次使用相同的片段 - 如何进行不同的onclick操作

时间:2016-12-02 20:44:05

标签: android android-fragments

假设我有一个片段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();
    }
}

2 个答案:

答案 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)

由于您已经使类实现了接口,因此在创建Fragment时,您可以覆盖WndProc

onClick

当然,例如,可以使用Bundle arguments在Fragment类中更好地实现这一点。