按钮全部从Android片段打开相同的活动

时间:2016-12-07 02:18:03

标签: java android android-fragments

目前我有一个fragment_one.xml,其上有CardViews个,并且每张卡上都有一个按钮,用于分隔XML页面(Lesson_One,Lesson_Two等...)但是使用OneFragment.java中的代码,两个按钮都会打开Lesson_Two

我该如何解决这个问题?这是我的代码

  

FragmentOne.java

public class OneFragment extends Fragment{
   Intent intent;  

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
   }

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_one, container, false);
    intent = new Intent(getActivity(), LessonOne.class);
    final Button button = (Button) root.findViewById(R.id.button1);

    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            startActivity(intent);
        }
    });

    intent = new Intent(getActivity(), LessonTwo.class);
    final Button button2 = (Button) root.findViewById(R.id.button2);

    button2.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            startActivity(intent);
        }
    });
    return root;
  }

}

2 个答案:

答案 0 :(得分:3)

你要分配intent两次,有效地用第二个意图覆盖第一个意图。

因此,无论触发哪个点击事件,LessonTwo.class都是启动的活动。

一个简单的解决方法是在点击处理程序中创建意图,如

public class OneFragment extends Fragment{


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_one, container, false);
    final Button button = (Button) root.findViewById(R.id.button1);

    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            startActivity(new Intent(getActivity(), LessonOne.class));
        }
    });

    final Button button2 = (Button) root.findViewById(R.id.button2);

    button2.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            startActivity(new Intent(getActivity(), LessonTwo.class););
        }
    });

    return root;
  }

}

这使得明确哪个点击处理程序启动了什么活动

答案 1 :(得分:1)

替代答案 - 在类本身上实现click侦听器。

这会清除onCreateView方法。你也不需要捕获"用于设置其侦听器的按钮。

public class OneFragment extends Fragment implements View.OnClickListener {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_one, container, false);

        root.findViewById(R.id.button1).setOnClickListener(this);
        root.findViewById(R.id.button2).setOnClickListener(this);

        return root;
    }

    @Override
    public void onClick(View v) {
        Class clz = null;
        switch (v.getId()) {
            case R.id.button1:
                clz = LessonOne.class;
            case R.id.button2;
                clz = LessonTwo.class;
        }

        if (clz != null) startActivity(new Intent(getActivity(), clz));

    }

}