我怎么能在片段中定义的方法? [英] how can I define method in fragment?

查看:176
本文介绍了我怎么能在片段中定义的方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


  

IHAVE试过这个code,同时扩大活动和它的运行(Y),但延长的片段时,我贴在这里给我这个异常:


java.lang.IllegalStateException:找不到在acttyivity类com.example.pc_orbit.myapplication.Citizen为的onClick处理方法scanQR(视图)在视图类android.widget.Button id为扫描器

公共类报告扩展片段

{

 静态最后弦乐ACTION_SCAN =com.google.zxing.client.android.SCAN;
@覆盖
公共查看onCreateView(LayoutInflater吹气,可空@的ViewGroup容器,@可空包savedInstanceState){
   //一个String = getIntent()getExtras()的getString(信息)。
    视图V = inflater.inflate(R.layout.report,集装箱,FALSE);
    返回伏;
}
公共无效scanQR(视图v){
    尝试{
        //从com.google.zxing.client.android.SCAN意图开始扫描活动
        意向意图=新意图(ACTION_SCAN);
        intent.putExtra(SCAN_MODE,QR_ code_MODE);
        startActivityForResult(意向,0);
    }赶上(ActivityNotFoundException anfe){
        //对捕捉,显示下载对话框
        的ShowDialog(getActivity(),无扫描仪发现,下载扫描仪code活性?,是,否)显示()。
    }
}
私有静态AlertDialog的ShowDialog(最终活动的行为,标题的CharSequence,CharSequence的消息的CharSequence buttonYes,为CharSequence buttonNo){
    AlertDialog.Builder downloadDialog =新AlertDialog.Builder(行为);
    downloadDialog.setTitle(职称);
    downloadDialog.setMessage(消息);
    downloadDialog.setPositiveButton(buttonYes,新DialogInterface.OnClickListener(){
        公共无效的onClick(DialogInterface dialogInterface,int i)以{
            URI URI = Uri.parse(?市场://搜Q = PNAME:+com.google.zxing.client.android);
            意向意图=新意图(Intent.ACTION_VIEW,URI);
            尝试{
                act.startActivity(意向);
            }赶上(ActivityNotFoundException anfe){            }
        }
    });
    downloadDialog.setNegativeButton(buttonNo,新DialogInterface.OnClickListener(){
        公共无效的onClick(DialogInterface dialogInterface,int i)以{
        }
    });
    返回downloadDialog.show();
}
//对ActivityResult方法
公共无效的onActivityResult(INT申请code,INT结果code,意图意图){
    如果(要求code == 0){
        如果(结果code == Activity.RESULT_OK){
            //获取从意图返回的群众演员
            字符串内容= intent.getStringExtra(SCAN_RESULT);
            字符串格式= intent.getStringExtra(SCAN_RESULT_FORMAT);
            吐司面包= Toast.makeText(getActivity()内容:+内容+格式:+格式,Toast.LENGTH_LONG);
            toast.show();
        }
    }
}

}


  

这是同时扩大其活动已经运行code


 进口android.app.Activity;
    进口android.app.AlertDialog;
    进口android.content.ActivityNotFoundException;
    进口android.content.DialogInterface;
    进口android.content.Intent;
    进口android.net.Uri;
    进口android.os.Bundle;
    进口android.view.View;
    进口android.widget.Toast;

公共类AndroidQr codeExample延伸活动{

 静态最后弦乐ACTION_SCAN =com.google.zxing.client.android.SCAN;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);}公共无效scanQR(视图v){
    尝试{
        //从com.google.zxing.client.android.SCAN意图开始扫描活动
        意向意图=新意图(ACTION_SCAN);
        intent.putExtra(SCAN_MODE,QR_ code_MODE);
        startActivityForResult(意向,0);
    }赶上(ActivityNotFoundException anfe){
        //对捕捉,显示下载对话框
        的ShowDialog(AndroidQr codeExample.this,没有发现扫描仪,下载扫描仪code活性?,是,否)显示()。
    }
 }私有静态AlertDialog的ShowDialog(最终活动的行为,标题的CharSequence,CharSequence的消息的CharSequence buttonYes,为CharSequence buttonNo){
    AlertDialog.Builder downloadDialog =新AlertDialog.Builder(行为);
    downloadDialog.setTitle(职称);
    downloadDialog.setMessage(消息);
    downloadDialog.setPositiveButton(buttonYes,新DialogInterface.OnClickListener(){
        公共无效的onClick(DialogInterface dialogInterface,int i)以{
            URI URI = Uri.parse(?市场://搜Q = PNAME:+com.google.zxing.client.android);
            意向意图=新意图(Intent.ACTION_VIEW,URI);
            尝试{
                act.startActivity(意向);
            }赶上(ActivityNotFoundException anfe){            }
        }
    });
    downloadDialog.setNegativeButton(buttonNo,新DialogInterface.OnClickListener(){
        公共无效的onClick(DialogInterface dialogInterface,int i)以{
        }
    });
    返回downloadDialog.show();
}//对ActivityResult方法
公共无效的onActivityResult(INT申请code,INT结果code,意图意图){
    如果(要求code == 0){
        如果(结果code == RESULT_OK){
            //获取从意图返回的群众演员
            字符串内容= intent.getStringExtra(SCAN_RESULT);
            字符串格式= intent.getStringExtra(SCAN_RESULT_FORMAT);
            吐司面包= Toast.makeText(这一点,内容:+内容+格式:+格式,Toast.LENGTH_LONG);
            toast.show();
        }
    }
}

}


  

在XML


\r
\r

<?XML版本=1.0编码=UTF-8? >\r
\r
< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android\r
\r
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s\r
    机器人:ID =@ + ID /容器\r
    机器人:layout_width =match_parent\r
    机器人:layout_height =match_parent\r
    机器人:背景=#FFFFFF\r
    机器人:方向=垂直\r
    工具:上下文=com.java codegeeks.androidstartactivityforresultexample.ActivityOne>\r
\r
<的TextView\r
\r
    机器人:ID =@ + ID / textView1\r
    机器人:layout_width =WRAP_CONTENT\r
    机器人:layout_height =WRAP_CONTENT\r
    机器人:layout_gravity =中心|顶\r
    机器人:layout_margin =20dp\r
    机器人:文字=扫描\r
    机器人:文字颜色=#000000\r
    机器人:TEXTSIZE =30dp/>\r
\r
<按钮\r
    机器人:ID =@ + ID /扫描仪\r
    机器人:layout_width =250dp\r
    机器人:layout_height =80dp\r
    机器人:layout_gravity =中心\r
    机器人:layout_margin =10dp\r
    机器人:比重=中心\r
    安卓的onClick =scanQR\r
    机器人:文字=QR code\r
    机器人:TEXTSIZE =18dp>\r
    < /按钮>\r
\r
<按钮\r
    机器人:ID =@ + ID / scanner2\r
    机器人:layout_width =250dp\r
    机器人:layout_height =80dp\r
    机器人:layout_gravity =中心\r
    机器人:layout_margin =10dp\r
    机器人:比重=中心\r
    安卓的onClick =scanBar\r
    机器人:文字=酒吧code\r
    机器人:TEXTSIZE =18dp>\r
    < /按钮>\r
    < / LinearLayout中>

\r

\r
\r


解决方案

的点击在活动中要被解雇,但不是在片段。因为你只有2个按钮的布局(因为我认为这是最好的做法)

我建议你设置按钮监听器在片段的onCreate方法。

 公共类报告扩展片段实现View.OnClickListener {@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState){
    视图V = inflater.inflate(R.layout.report,集装箱,FALSE);    按钮scannerButton =(按钮)v.findViewById(R.id.scanner);
    按钮scanner2Button =(按钮)v.findViewById(R.id.scanner2);    scannerButton.setOnClickListener(本);
    scanner2Button.setOnClickListener(本);    返回伏;
}@覆盖
公共无效的onClick(视图v){
    如果(v.getId()== R.id.scanner){
        scanQR(五);
    }否则如果(v.getId()== R.id.scanner2){
        scanBar(五);
    }
}

Ihave tried this code while extending Activity and it's run (Y) but when extending fragment as I paste here it give me this exception :

java.lang.IllegalStateException: Could not find a method scanQR(View) in the acttyivity class com.example.pc_orbit.myapplication.Citizen for onClick handler on view class android.widget.Button with id 'scanner'

public class Report extends Fragment

{

static final String ACTION_SCAN = "com.google.zxing.client.android.SCAN";
@Override
public View onCreateView(LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState){
   // String s= getIntent().getExtras().getString("info");
    View v=  inflater.inflate(R.layout.report, container, false);
    return v;
}
public void  scanQR(View v) {
    try {
        //start the scanning activity from the com.google.zxing.client.android.SCAN intent
        Intent intent = new Intent(ACTION_SCAN);
        intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
        startActivityForResult(intent, 0);
    } catch (ActivityNotFoundException anfe) {
        //on catch, show the download dialog
        showDialog(getActivity(), "No Scanner Found", "Download a scanner code activity?", "Yes", "No").show();
    }
}
private static AlertDialog showDialog(final Activity act, CharSequence title, CharSequence message, CharSequence buttonYes, CharSequence buttonNo) {
    AlertDialog.Builder downloadDialog = new AlertDialog.Builder(act);
    downloadDialog.setTitle(title);
    downloadDialog.setMessage(message);
    downloadDialog.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialogInterface, int i) {
            Uri uri = Uri.parse("market://search?q=pname:" + "com.google.zxing.client.android");
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            try {
                act.startActivity(intent);
            } catch (ActivityNotFoundException anfe) {

            }
        }
    });
    downloadDialog.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialogInterface, int i) {
        }
    });
    return downloadDialog.show();
}
//on ActivityResult method
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 0) {
        if (resultCode == Activity.RESULT_OK) {
            //get the extras that are returned from the intent
            String contents = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
            Toast toast = Toast.makeText(getActivity(), "Content:" + contents + " Format:" + format, Toast.LENGTH_LONG);
            toast.show();
        }
    }
}

}

and this is the code which had run while extending Activity

    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.ActivityNotFoundException;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Toast;

public class AndroidQrCodeExample extends Activity {

static final String ACTION_SCAN = "com.google.zxing.client.android.SCAN";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

}

public void scanQR(View v) {
    try {
        //start the scanning activity from the com.google.zxing.client.android.SCAN intent
        Intent intent = new Intent(ACTION_SCAN);
        intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
        startActivityForResult(intent, 0);
    } catch (ActivityNotFoundException anfe) {
        //on catch, show the download dialog
        showDialog(AndroidQrCodeExample.this, "No Scanner Found", "Download a scanner code activity?", "Yes", "No").show();
    }
 }

private static AlertDialog showDialog(final Activity act, CharSequence title, CharSequence message, CharSequence buttonYes, CharSequence buttonNo) {
    AlertDialog.Builder downloadDialog = new AlertDialog.Builder(act);
    downloadDialog.setTitle(title);
    downloadDialog.setMessage(message);
    downloadDialog.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialogInterface, int i) {
            Uri uri = Uri.parse("market://search?q=pname:" + "com.google.zxing.client.android");
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            try {
                act.startActivity(intent);
            } catch (ActivityNotFoundException anfe) {

            }
        }
    });
    downloadDialog.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialogInterface, int i) {
        }
    });
    return downloadDialog.show();
}

//on ActivityResult method
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            //get the extras that are returned from the intent
            String contents = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
            Toast toast = Toast.makeText(this, "Content:" + contents + " Format:" + format, Toast.LENGTH_LONG);
            toast.show();
        }
    }
}

}

the xml

    <?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:orientation="vertical"
    tools:context="com.javacodegeeks.androidstartactivityforresultexample.ActivityOne" >

<TextView

    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center|top"
    android:layout_margin="20dp"
    android:text="Scan"
    android:textColor="#000000"
    android:textSize="30dp" />

<Button
    android:id="@+id/scanner"
    android:layout_width="250dp"
    android:layout_height="80dp"
    android:layout_gravity="center"
    android:layout_margin="10dp"
    android:gravity="center"
    android:onClick="scanQR"
    android:text="QR Code"
    android:textSize="18dp" >
    </Button>

<Button
    android:id="@+id/scanner2"
    android:layout_width="250dp"
    android:layout_height="80dp"
    android:layout_gravity="center"
    android:layout_margin="10dp"
    android:gravity="center"
    android:onClick="scanBar"
    android:text="Bar Code"
    android:textSize="18dp" >
    </Button>
    </LinearLayout>

解决方案

The click gonna be fired in the activity but not in the fragment. Because you have only 2 buttons in your layout (and because I think it's the best practice)

I suggest you to set the button listener in the onCreate method of the fragment.

public class Report extends Fragment implements View.OnClickListener{

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

    Button scannerButton = (Button) v.findViewById(R.id.scanner);
    Button scanner2Button = (Button) v.findViewById(R.id.scanner2);

    scannerButton.setOnClickListener(this);
    scanner2Button.setOnClickListener(this);

    return v;
}

@Override
public void onClick(View v) {
    if (v.getId() == R.id.scanner) {
        scanQR(v);
    } else if (v.getId() == R.id.scanner2) {
        scanBar(v);
    }
}

这篇关于我怎么能在片段中定义的方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆