片段按钮onClick没有解雇...我错过了什么?

时间:2013-12-30 20:12:46

标签: android android-fragments android-button

当我的应用程序启动时,首先发生的是一个片段来到前面,带有是/否问题。根据您的答案,它将替换为适当的片段。但是目前杀死我的是2按钮的onclicks甚至没有被调用。我在这里简化了代码。

奇怪的是,当我在Activity中运行相同的代码而不是片段时,它运行正常。让我知道你的想法。谢谢

import android.app.Fragment;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

public class FirstLaunchFragment extends Fragment implements OnClickListener {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_first_launch, container,
                false);

        Button mYesButton = (Button) view.findViewById(R.id.b_yes_mom);
        mYesButton.setOnClickListener(this);

        Button mNoButton = (Button) view.findViewById(R.id.b_no_mom);
        mNoButton.setOnClickListener(this);

        return view;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {

            case R.id.b_yes_mom:
                Toast.makeText(getActivity(), "YES is clicked!", 
                                           Toast.LENGTH_LONG).show();
                break;

            case R.id.b_no_mom:
                Toast.makeText(getActivity(), "NO is clicked!", 
                                           Toast.LENGTH_LONG).show();
                break;
        }
    }
}

这是片段的XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#BCED91"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >

<ImageView
    android:id="@+id/iv_stork_and_baby"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:layout_alignLeft="@+id/textView1"
    android:layout_alignTop="@+id/iv_stork_and_baby"
    android:scaleType="fitCenter"
    android:src="@drawable/storkbaby" />

<ImageView
    android:id="@+id/iv_app_name_png"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/iv_stork_and_baby"
    android:layout_centerHorizontal="true"
    android:scaleType="fitCenter"
    android:src="@drawable/cooltext1349499090" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/iv_stork_and_baby"
    android:layout_centerHorizontal="true"
    android:text="@string/are_you_mom" />

<Button
    android:id="@+id/b_no_mom"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/textView1"
    android:layout_below="@+id/iv_stork_and_baby"
    android:text="NO" />

<Button
    android:id="@+id/b_yes_mom"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/iv_stork_and_baby"
    android:layout_below="@+id/iv_stork_and_baby"
    android:text="YES" />

</RelativeLayout>

!!!!!!!!!编辑!!!!!!!!!

因为这让我的大脑痒,我创建了一个新项目,并开始一点一点地复制/粘贴代码,看看是什么打破了这个功能。最后......一切都奏效了。它与上面完全相同,但它适用于此项目,但不适用于上一个项目。我认为android只是挑剔。

感谢所有人的帮助!!!

3 个答案:

答案 0 :(得分:2)

您需要在onClick中直接使用xml方法,如下所示:

<Button
    android:id="@+id/b_no_mom"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/textView1"
    android:layout_below="@+id/iv_stork_and_baby"
    android:text="NO"
    android:onClick="NoClicked" />

<Button
    android:id="@+id/b_yes_mom"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/iv_stork_and_baby"
    android:layout_below="@+id/iv_stork_and_baby"
    android:text="YES"
    android:onClick="YesClicked" />

在你的FragmentActivity课程中:

public void YesClicked(View v) {
    // Do something
}

public void NoClicked(View v) {
    // Do something
}  

希望这有帮助。

答案 1 :(得分:0)

确保id与布局xml

中的ID匹配
  case  R.id.b_yes_mom: 
     // do something
  break; 
  case R.id.b_no_mom:
      //do something
  break;

答案 2 :(得分:-1)

这样的界线:

    android:layout_below="@+id/iv_stork_and_baby"

应该是这样的:

     android:layout_below="@id/iv_stork_and_baby"

即。删除导致id定义的“+”。 不能说为什么它可以作为一个活动而不是作为一个片段 - 可能是无关的,或者你在转换过程中引入了这个问题。