onClickListener在Fragment中不起作用

时间:2016-12-27 15:45:40

标签: java android android-fragments

当我点击其中一个片段中的按钮时,没有任何反应,听众无法正常工作。每当我按下按钮试图按下按钮时,它就不会变成紫色。

爪哇:

public class CollegeMatch extends Fragment {
    TextView resuLTS;
    EditText actorsat;
    EditText rank;
    EditText gpa;
    EditText apclasses;
    public Button calcButton;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_college_match, container, false);    

        resuLTS = (TextView) view.findViewById(R.id.resuLTS);
        actorsat = (EditText) view.findViewById(R.id.actorsat);
        gpa = (EditText) view.findViewById(R.id.gpa);
        rank = (EditText) view.findViewById(R.id.rank);
        apclasses = (EditText) view.findViewById(R.id.apclasses);
        Button calcButton;
        calcButton = (Button) view.findViewById(R.id.calcButton);
        calcButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view2) {
                float act = Float.parseFloat(actorsat.getText().toString());
                float ap = Float.parseFloat(apclasses.getText().toString());
                float rk = Float.parseFloat(rank.getText().toString());
                float gp = Float.parseFloat(gpa.getText().toString());
                float res = act + ap + rk + gp;
                resuLTS.setText(Float.toString(res));    
            }    
        });
        return view;
    }    
}

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"
        tools:context="layout.CollegeMatch"
        android:background="#bdeaf4"
        android:id="@+id/calcBTN">

    <!-- TODO: Update blank fragment layout -->

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Find colleges!"
        android:id="@+id/textView134"
        android:layout_marginTop="50dp"
        android:textColor="#000000"
        android:textSize="37dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:typeface="serif"
        android:textStyle="bold" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/actorsat"
        android:layout_marginTop="57dp"
        android:autoText="false"
        android:hint="Enter  Composite Score "
        android:layout_below="@+id/textView134"
        android:layout_alignLeft="@+id/gpa"
        android:layout_alignStart="@+id/gpa" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ACT  Composite"
        android:id="@+id/textView135"
        android:textColor="@color/abc_input_method_navigation_guard"
        android:textSize="25dp"
        android:layout_alignBottom="@+id/actorsat"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginLeft="46dp"
        android:layout_marginStart="46dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Unweighted GPA"
        android:id="@+id/textView136"
        android:textColor="@color/abc_input_method_navigation_guard"
        android:textSize="25dp"
        android:layout_marginTop="35dp"
        android:layout_below="@+id/textView135"
        android:layout_alignLeft="@+id/textView135"
        android:layout_alignStart="@+id/textView135" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Class Rank (Top _ %)"
        android:id="@+id/textView138"
        android:textColor="@color/abc_input_method_navigation_guard"
        android:textSize="25dp"
        android:layout_marginTop="47dp"
        android:layout_below="@+id/textView136"
        android:layout_alignLeft="@+id/textView136"
        android:layout_alignStart="@+id/textView136" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/rank"
        android:layout_above="@+id/tex554"
        android:layout_alignLeft="@+id/apclasses"
        android:layout_alignStart="@+id/apclasses"
        android:hint="Enter Here  (omit % sign) " />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Total # of AP classes"
        android:id="@+id/tex554"
        android:textColor="@color/abc_input_method_navigation_guard"
        android:textSize="25dp"
        android:layout_marginTop="39dp"
        android:layout_below="@+id/textView138"
        android:layout_alignLeft="@+id/textView138"
        android:layout_alignStart="@+id/textView138" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/apclasses"
        android:hint="Enter number here"
        android:layout_alignBottom="@+id/tex554"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Match Me!"
        android:id="@+id/calcButton"
        android:layout_marginTop="57dp"
        android:background="#ff0000"
        android:textColor="#ffffff"
        android:textSize="50dp"
        android:layout_below="@+id/apclasses"
        android:layout_alignLeft="@+id/textView134"
        android:layout_alignStart="@+id/textView134" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Your College Match Results:"
        android:id="@+id/textView155"
        android:textColor="@color/abc_input_method_navigation_guard"
        android:textSize="32dp"
        android:layout_marginTop="46dp"
        android:textStyle="normal|bold|italic"
        android:layout_below="@+id/calcButton"
        android:layout_centerHorizontal="true" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:ems="10"
        android:id="@+id/gpa"
        android:hint="Enter GPA here"
        android:layout_above="@+id/textView138"
        android:layout_alignLeft="@+id/rank"
        android:layout_alignStart="@+id/rank" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0"
        android:id="@+id/resuLTS"
        android:layout_below="@+id/textView155"
        android:layout_alignLeft="@+id/textView155"
        android:layout_alignStart="@+id/textView155"
        android:layout_marginTop="76dp"
        android:layout_alignRight="@+id/textView155"
        android:layout_alignEnd="@+id/textView155"
        android:textColor="#000000"
        android:textIsSelectable="false"
        android:textSize="25dp" />

</RelativeLayout>

3 个答案:

答案 0 :(得分:1)

你在onViewCreated()方法中做的事情。在创建view之后触发此方法,因此它不会应用您的资料。

将代码移到onCreateView()内,如下所示:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_college_match, container, false);

    //do stuffs, for example:

    resuLTS = (TextView) view.findViewById(R.id.resuLTS);
    actorsat = (EditText) view.findViewById(R.id.actorsat);
    gpa = (EditText) view.findViewById(R.id.gpa);
    rank = (EditText) view.findViewById(R.id.rank);
    apclasses = (EditText) view.findViewById(R.id.apclasses);

    Button calcbutton = (Button) view.findViewById(R.id.calcbutton);
    calcbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick (View view2) {
            float act = Float.parseFloat(actorsat.getText().toString());
            float ap = Float.parseFloat(apclasses.getText().toString());
            float rk = Float.parseFloat(rank.getText().toString());
            float gp = Float.parseFloat(gpa.getText().toString());
            float res = act + ap +rk +gp;
            resuLTS.setText(Float.toString(res));

        }

    });
    return view;
}

那应该有用(我没有编译器,所以这可能不完美,对于我在这里的任何问题)

答案 1 :(得分:0)

我总是看到这个错误

我自己犯了这个错误并看到其他人这样做,在给你的布局充气时这样做:

RelativeLayout view = (RelativeLayout) inflater.inflate(R.layout.fragment_college_match, null);

之后你可以这样做:

Button calcButton = (Button) view.getChildAt(8);

我不确定你是否仍然可以通过这种方式拨打view.findViewById(),但尝试这是一个好主意。

我这不起作用,你得到一个错误,一定要发布。

<强>更新

我重读了inflate方法,只要inflater.inflate的最后一个参数为true,你应该可以使用你的方法,但不建议这样做。

最终答案:

在XML中,您不止一次添加id textView134:

首先是textview:

android:id="@+id/textView134"

按钮:

android:layout_alignLeft="@+id/textView134"

在按钮左对齐添加一个新ID,而不是这样做:

android:layout_alignLeft="@id/textView134"

请注意,没有&#34; +&#34;在引用现有ID时。

我也在很多其他观点中找到了它,所以一定要解决这个问题。

为什么你的问题出现了? 添加新的ID时(没有?我猜)代码不使用edittexts中的id。请务必了解添加和引用ID之间的区别。

希望我帮助,

<强> -Daniel

答案 2 :(得分:0)

您只需要查看带有此片段的活动视图,这只有在您的片段已经创建时才会发生

覆盖片段中的onViewCreated()方法并享受其魔力:) ..

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Button button = (Button) view.findViewById(R.id.YOURBUTTONID);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
     //place your action here
     }
});

希望这可以帮到你;