我怎么能在片段中定义的方法? [英] how can I define method in fragment?
问题描述
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\r\r<?XML版本=1.0编码=UTF-8? >\r
\r
< LinearLayout中的xmlns:机器人=http://schemas.android.com/apk/res/android\r
\r
的xmlns:工具=http://schemas.android.com/tools\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
解决方案的点击在活动中要被解雇,但不是在片段。因为你只有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屋!