onClickListener在Fragment中不起作用

时间:2014-10-25 04:18:30

标签: android mysql onclick fragment onclicklistener

尝试使用按钮运行片段并在执行后收到错误:

遵循此S.O.回答How to handle button clicks using the XML onClick within Fragments,但不与我合作。

DetalhesFragment.java

package com.example.waitersoriginal;

import android.app.Fragment;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsoluteLayout;
import android.widget.Button;
import android.widget.TextView;

public class DetalhesFragment extends Fragment implements OnClickListener{

    TextView nomeEntrada,descrEntrada,valorEntrada,nmArm,dsArm,vlArm;
    String txtNome, txtDescr;
    View view,v;

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

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

        Button mButton = (Button) view.findViewById(R.id.button1);

        nomeEntrada= (TextView) view.findViewById(R.id.textView1);
        descrEntrada= (TextView)view.findViewById(R.id.textView2);
        valorEntrada= (TextView)view.findViewById(R.id.textView3);

        mButton.setOnClickListener((android.view.View.OnClickListener) this);
        return view;
    }
        public void onClick(View v) {
            // TODO Auto-generated method stub

            switch (v.getId()) {
                case R.id.button1:

                    PedidosFragment array = (PedidosFragment)getFragmentManager().findFragmentById(R.id.fragment3); 
                    array.criaArray(txtNome,txtDescr);

                    break;
        }
 }              

    public void change(String txt, String txt1){
    //public void change(String txt, String txt1, String txt2){
    //public void change(String txt){
        nomeEntrada.setText(txt);
        descrEntrada.setText(txt1);
        txtNome = txt;
        txtDescr = txt1;
        //valorEntrada.setText(txt2);

    }  

}

但是这一行包含错误:

public class DetalhesFragment extends Fragment implements OnClickListener{

错误: 类型DetalhesFragment必须实现继承的抽象方法DialogInterface.OnClickListener.onClick(DialogInterface,int)

我试图实施上述方法,但没有成功。

有人可以帮我吗?

泰!

修改

detalhes_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="14dp"
        android:layout_y="14dp"
        android:textSize="25dp" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="455dp"
        android:layout_height="wrap_content"
        android:layout_x="14dp"
        android:layout_y="78dp"
        android:textSize="18dp" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="170dp"
        android:layout_height="wrap_content"
        android:layout_x="285dp"
        android:layout_y="19dp"
        android:textSize="22dp" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="14dp"
        android:layout_y="395dp"
        android:text="Adicionar aos Pedidos"
        android:visibility="visible" />

</AbsoluteLayout>

3 个答案:

答案 0 :(得分:1)

删除此代码:

 mButton.setOnClickListener((android.view.View.OnClickListener) this);
    return view;
}
    public void onClick(View v) {
        // TODO Auto-generated method stub

        switch (v.getId()) {
            case R.id.button1:

                PedidosFragment array = (PedidosFragment)getFragmentManager().findFragmentById(R.id.fragment3); 
                array.criaArray(txtNome,txtDescr);

                break;
    }

}

替换此代码......

 mButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
             switch (v.getId()) {
                case R.id.button1:

                    PedidosFragment array = (PedidosFragment)getFragmentManager().findFragmentById(R.id.fragment3); 
                    array.criaArray(txtNome,txtDescr);

                    break;
        }
    });
    return view;
}

答案 1 :(得分:0)

正如错误所示,您必须实现(在您的类中添加)名为onClick的方法,其参数类型为DialogInterface,另一个类型为int

那是因为你的implementing接口是一种合约。您实现它的接口的所有方法对于您在类上创建它是强制性的,即使它根本没有代码。

像:

@Override
public void onClick(DialogInterface dialogInterface, int i){}

修改

抱歉,我刚刚看到你的代码并看到方法是你需要做的就是添加正确的参数。现在你只是传递一个观点。

答案 2 :(得分:0)

您可以使用线性布局吗?

为什么使用绝对布局?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" ><TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="14dp"
    android:layout_y="14dp"
    android:textSize="25dp" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="455dp"
    android:layout_height="wrap_content"
    android:layout_x="14dp"
    android:layout_y="78dp"
    android:textSize="18dp" />

<TextView
    android:id="@+id/textView3"
    android:layout_width="170dp"
    android:layout_height="wrap_content"
    android:layout_x="285dp"
    android:layout_y="19dp"
    android:textSize="22dp" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="14dp"
    android:layout_y="395dp"
    android:text="Adicionar aos Pedidos"
    android:visibility="visible" />

</LinearLayout>`

你能试试这个......