2016-05-13 43 views
-1

我是Android开发的初学者,所以我使用基于克单位转换的Eclipse创建Android应用程序,但它不工作。onClick button Android

我的Android应用程序的概念是,我使用三个项目的导航抽屉:首页(Accueil),转换器(Convertisseur)和关于(A Propos)。 所以当我点击转换器选项时,它必须显示一个包含克单位转换的片段。当我输入我的值来转换并选择我想要的转换单位时,当我点击转换按钮(Convertir)时,应用程序获取堆栈并关闭本身。

任何人都可以帮助我!

这是我的片段类:

package com.hw.converter; 

import android.os.Bundle; 
import android.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Spinner; 
import android.widget.TextView; 

public class ConverterFragment extends Fragment { 
    String[] units; 
    Spinner spn1, spn2; 
    EditText editValue; 
    TextView tvResult; 
    double value; 
    Button myBtn; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_converter, container, false); 

    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getView().getContext(), 
       R.array.units, android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spn1 = (Spinner)getView().findViewById(R.id.spnUnits1); 
     spn2 = (Spinner)getView().findViewById(R.id.spnUnits2); 
     units = getResources().getStringArray(R.array.units); 
     spn1.setAdapter(adapter); 
     spn2.setAdapter(adapter); 


    } 
    public void convertir(View view){ 
     String edit = editValue.getText().toString(); 
     if(edit == null || edit.isEmpty()) { 
      value = 0.0; 
     } else { 
      value = Double.parseDouble(edit); 
     } 
     tvResult = (TextView)getView().findViewById(R.id.tvResult); 
     int choix1 = spn1.getSelectedItemPosition(); 
     int choix2 = spn2.getSelectedItemPosition(); 
     switch(choix1){ 
     case 0:{ 
      switch(choix2){ 
      case 0: 
       tvResult.setText(value+" mg");break; 
      case 1: 
       value/=10; 
       tvResult.setText(value+" cg");break; 
      case 2: 
       value/=100; 
       tvResult.setText(value+" dg");break; 
      case 3: 
       value/=1000; 
       tvResult.setText(value+" g");break; 
      case 4: 
       value/=10000; 
       tvResult.setText(value+" dag");break; 
      case 5: 
       value/=100000; 
       tvResult.setText(value+" hg");break; 
      case 6: 
       value/=1000000; 
       tvResult.setText(value+" kg");break; 
      default: 
       tvResult.setText(value+" g");break; 
      }break;} 

     case 1:{ 
      switch(choix2){ 
      case 0: 
       value*=10; 
       tvResult.setText(value+" mg");break; 
      case 1: 
       editValue.setText(value+" cg");break; 
      case 2: 
       value/=10; 
       tvResult.setText(value+" dg");break; 
      case 3: 
       value/=100; 
       tvResult.setText(value+" g");break; 
      case 4: 
       value/=1000; 
       tvResult.setText(value+" dag");break; 
      case 5: 
       value/=10000; 
       tvResult.setText(value+" hg");break; 
      case 6: 
       value/=100000; 
       tvResult.setText(value+" kg");break; 
      default: 
       tvResult.setText(value+" g");break; 
      }break; 
      } 

     case 2:{ 
      switch(choix2){ 
      case 0: 
       value*=100; 
       tvResult.setText(value+" mg");break; 
      case 1: 
       value*=10; 
       tvResult.setText(value+" cg");break; 
      case 2: 
       tvResult.setText(value+" dg");break; 
      case 3: 
       value/=10; 
       tvResult.setText(value+" g");break; 
      case 4: 
       value/=100; 
       tvResult.setText(value+" dag");break; 
      case 5: 
       value/=1000; 
       tvResult.setText(value+" hg");break; 
      case 6: 
       value/=10000; 
       tvResult.setText(value+" kg");break; 
      default: 
       tvResult.setText(value+" g");break; 
      }break; 
     } 

     case 3:{ 
      switch(choix2){ 
      case 0: 
       value*=1000; 
       tvResult.setText(value+" mg");break; 
      case 1: 
       value*=100; 
       tvResult.setText(value+" cg");break; 
      case 2: 
       value*=10; 
       tvResult.setText(value+" dg");break; 
      case 3: 
       tvResult.setText(value+" g");break; 
      case 4: 
       value/=10; 
       tvResult.setText(value+" dag");break; 
      case 5: 
       value/=100; 
       tvResult.setText(value+" hg");break; 
      case 6: 
       value/=1000; 
       tvResult.setText(value+" kg");break; 
      default: 
       tvResult.setText(value+" g");break; 
      }break; 
      } 
     case 4: 
     {switch(choix2){ 
     case 0: 
      value*=10000; 
      tvResult.setText(value+" mg");break; 
     case 1: 
      value*=1000; 
      tvResult.setText(value+" cg");break; 
     case 2: 
      value*=100; 
      tvResult.setText(value+" dg");break; 
     case 3: 
      value*=10; 
      tvResult.setText(value+" g");break; 
     case 4: 
      tvResult.setText(value+" dag");break; 
     case 5: 
      value/=10; 
      tvResult.setText(value+" hg");break; 
     case 6: 
      value/=100; 
      editValue.setText(value+" kg");break; 
     default: 
      tvResult.setText(value+" g");break; 
     }break; 
     } 
     case 5:{ 
      switch(choix2){ 
      case 0: 
       value*=100000; 
       tvResult.setText(value+" mg");break; 
      case 1: 
       value*=10000; 
       tvResult.setText(value+" cg");break; 
      case 2: 
       value*=1000; 
       tvResult.setText(value+" dg");break; 
      case 3: 
       value*=100; 
       tvResult.setText(value+" g");break; 
      case 4: 
       value*=10; 
       tvResult.setText(value+" dag");break; 
      case 5: 
       tvResult.setText(value+" hg");break; 
      case 6: 
       value/=10; 
       tvResult.setText(value+" kg");break; 
      default: 
       tvResult.setText(value+" g");break; 
      }break; 
     } 
     case 6:{ 
      switch(choix2){ 
      case 0: 
       value*=1000000; 
       tvResult.setText(value+" mg");break; 
      case 1: 
       value*=100000; 
       tvResult.setText(value+" cg");break; 
      case 2: 
       value*=10000; 
       tvResult.setText(value+" dg");break; 
      case 3: 
       value*=1000; 
       tvResult.setText(value+" g");break; 
      case 4: 
       value*=100; 
       tvResult.setText(value+" dag");break; 
      case 5: 
       value*=10; 
       tvResult.setText(value+" hg");break; 
      case 6: 
       tvResult.setText(value+" kg");break; 
      default: 
       tvResult.setText(value+" g");break; 
      }break; 

     } 

     } 
    } 


} 

这是我转换器布局代码:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawerLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.hw.converter.ConverterActivity" > 

    <ListView android:id="@+id/drawerList" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:entries="@array/mymenu" 
     android:layout_gravity="start"> 

    </ListView> 

    <RelativeLayout android:id="@+id/convertContent" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     > 

     <TextView 
      android:id="@+id/tvTitle" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:text="@string/tvTitle" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 
     <TextView 
      android:id="@+id/tv1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:paddingTop="25dp" 
      android:layout_below="@id/tvTitle" 
      android:text="@string/tv1" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <Spinner 
      android:id="@+id/spnUnits1" 
      android:layout_width="100dp" 
      android:layout_height="wrap_content" 
      android:layout_alignTop="@+id/tv1" 
      android:layout_marginLeft="41dp" 
      android:layout_marginStart="41dp" 
      android:layout_marginTop="30dp" 
      android:layout_toEndOf="@+id/tv1" 
      android:layout_toRightOf="@+id/tv1" 

       /> 

     <EditText 
      android:id="@+id/editQte" 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent" 
      android:layout_below="@+id/tv1" 
      android:inputType="number" 
      android:hint="@string/editHint" 
      > 

     </EditText> 
     <Spinner 
      android:id="@+id/spnUnits2" 
      android:layout_width="100dp" 
      android:layout_height="wrap_content" 
      android:layout_alignTop="@+id/tv2" 
      android:layout_below="@+id/editQte" 
      android:layout_marginLeft="41dp" 
      android:layout_marginStart="41dp" 
      android:layout_marginTop="30dp" 
      android:layout_toEndOf="@+id/tv2" 
      android:layout_toRightOf="@+id/tv2" 
      /> 

     <TextView 
      android:id="@+id/tv2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:paddingTop="25dp" 
      android:layout_marginTop="20dp" 
      android:layout_below="@id/tv1" 
      android:text="@string/tv2" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      /> 

     <Button 
      android:id="@+id/btnConvert" 
      android:layout_width="150dp" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/spnUnits2" 
      android:layout_marginTop="56dp" 
      android:layout_centerInParent="true" 
      android:text="@string/btnConvert" 
      android:onClick="com.hw.converter.ConverterFragment.convertir" /> 

     <TextView 
      android:id="@+id/tvResult" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/btnConvert" 
      android:layout_marginTop="24dp" 
      android:text="@string/tvResult" 
      android:layout_marginLeft="20dp" 
      android:layout_marginStart="20dp" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

    </RelativeLayout> 



</android.support.v4.widget.DrawerLayout> 

编辑:现在的错误日志是有道理的,你能帮助请! 这是错误日志,我后,我改变它获得:

05-13 10:30:29.972: E/AndroidRuntime(5621): FATAL EXCEPTION: main 
05-13 10:30:29.972: E/AndroidRuntime(5621): Process: com.hw.converter, PID: 5621 
05-13 10:30:29.972: E/AndroidRuntime(5621): java.lang.IllegalStateException: Could not find a method com.hw.converter.ConverterFragment.convertir(View) in the activity class com.hw.converter.MainActivity for onClick handler on view class android.widget.Button with id 'btnConvert' 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at android.view.View$1.onClick(View.java:3864) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at android.view.View.performClick(View.java:4492) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at android.view.View$PerformClick.run(View.java:18568) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at android.os.Handler.handleCallback(Handler.java:733) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at android.os.Handler.dispatchMessage(Handler.java:95) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at android.os.Looper.loop(Looper.java:136) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at android.app.ActivityThread.main(ActivityThread.java:5021) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at java.lang.reflect.Method.invoke(Method.java:515) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at dalvik.system.NativeStart.main(Native Method) 
05-13 10:30:29.972: E/AndroidRuntime(5621): Caused by: java.lang.NoSuchMethodException: com.hw.converter.ConverterFragment.convertir [class android.view.View] 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at java.lang.Class.getConstructorOrMethod(Class.java:472) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at java.lang.Class.getMethod(Class.java:857) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at android.view.View$1.onClick(View.java:3857) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  ... 11 more 
+1

你得到了什么错误? – Jeffalee

+1

分享错误日志请 – Sishin

+1

'android:onClick'方法 - 必须是一个公共和'视图'作为唯一的参数.. – Bharatesh

回答

1

it4Astuces,

按钮的onclick行动的默认签名应该是

public void NameOfTheMethod(View view) { 
} 

因此改变你的到

public void convertir(View view){ 
} 

你还没有粘贴你的错误日志:) Tho呃,我相信它一定是说没有找到'convertir'的方法。这是因为android会查找以视图为参数的convertir方法:)

public void convertir(View view)与public void convertir()不同。因此,更新你的方法,以配合Android的要求,你要善于去:)

编辑 基于错误日志,你已经张贴在评论我相信崩溃的原因是

value = Double.parseDouble(editValue.getText().toString()); 

虽然我不能肯定是错误日志中,您已经张贴使得没有太大意义ATLEAST我:(你可以改变你的代码如下,并让我再知道如果它解决您的问题

String editValue = editValue.getText().toString(); 
if(editValue == null || editValue.isEmpty()) { 
    value = 0.0; 
} else { 
    value = Double.parseDouble(editValue); 
} 

空或EMP ty值不是JAVA Double.parseDouble considerred作为parceable

问题应该得到解决:)快乐编码

+0

谢谢你的回答,我改变了我的代码,但它得到了堆栈。 错误日志显示:threadid = 1:线程以未捕获的异常退出(group = 0x9ccdeb20) – it4Astuces

+0

@ it4astuces:你究竟得到了什么错误?你可以请发布错误日志? –

+0

@ it4astuces:你可以得到错误日志在Eclipse中,转到窗口 - >显示视图 - >其他 - > Android-> Logcat。请检查屏幕,你必须看到很多红色的线请在这里发布:)反正一个免费的建议:P转移到Android工作室尽快:) –

0

xml文件

 <Button 
     android:id="@+id/btnConvert" 
     android:layout_width="150dp" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/spnUnits2" 
     android:layout_marginTop="56dp" 
     android:layout_centerInParent="true" 
     android:text="@string/btnConvert" 
     android:onClick="onClick" /> 

您的主文件

public class ConverterFragment extends Fragment { 
String[] units; 
Spinner spn1, spn2; 
EditText editValue; 
TextView tvResult; 
double value; 
Button myBtn; 

..... 
..... 


public void onClick(View view) 
{ 

//action you want on button clicked 
} 

}