2016-06-14 141 views
0

我正在研究一个将运行ussd代码的android应用程序。但是当我点击列表项时,应用程序崩溃。 你能告诉我如何在if语句中写入列表中的第一个值而不需要手动编写所有数字吗?如何将调用功能添加到android片段类?

片段类别: 它具有呼叫功能...

/** 
* A simple {@link Fragment} subclass. 
* Activities that contain this fragment must implement the 
* {@link ussd.OnFragmentInteractionListener} interface 
* to handle interaction events. 
* Use the {@link ussd#newInstance} factory method to 
* create an instance of this fragment. 
*/ 
public class ussd extends Fragment { 
    // TODO: Rename parameter arguments, choose names that match 
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER 
    private static final String ARG_PARAM1 = "param1"; 
    private static final String ARG_PARAM2 = "param2"; 

    // TODO: Rename and change types of parameters 
    private String mParam1; 
    private String mParam2; 
    private ListView listView; 
    private ussdadaper ussd; 
    private List<ussdz> ussdlist; 

    private OnFragmentInteractionListener mListener; 

    public ussd() { 
     // Required empty public constructor 
    } 

    /** 
    * Use this factory method to create a new instance of 
    * this fragment using the provided parameters. 
    * 
    * @param param1 Parameter 1. 
    * @param param2 Parameter 2. 
    * @return A new instance of fragment ussd. 
    */ 
    // TODO: Rename and change types and number of parameters 
    public static ussd newInstance(String param1, String param2) { 
     ussd fragment = new ussd(); 
     Bundle args = new Bundle(); 
     args.putString(ARG_PARAM1, param1); 
     args.putString(ARG_PARAM2, param2); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (getArguments() != null) { 
      mParam1 = getArguments().getString(ARG_PARAM1); 
      mParam2 = getArguments().getString(ARG_PARAM2); 
     } 
    } 


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

     listView = (ListView)rootView.findViewById(R.id.listView); 
     ussdlist = new ArrayList<>(); 
     ussdlist.add(new ussdz(1,"*#44336#","Software Version Info")); 

     listView.setOnItemClickListener(
       new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
         String item = (String)listView.getItemAtPosition(position); 
         if(position == 0){ 

         Intent callIntent = new Intent(Intent.ACTION_CALL); 
         callIntent.setData(Uri.parse("*#44336#")); 
         callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         startActivity(callIntent); 
        }} 
       } 
     ); 


     ussd = new ussdadaper(getActivity(),ussdlist); 
     listView .setAdapter(ussd); //you should setthe adapter to the listview 
     return rootView; 
    } 

    // TODO: Rename method, update argument and hook method into UI event 
    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
     mListener = null; 
    } 


    public interface OnFragmentInteractionListener { 
     public void onFragmentInteractionHome(Uri uri); 
     public void openHome(View view); 
    } 
    } 

    /** 
    * This interface must be implemented by activities that contain this 
    * fragment to allow an interaction in this fragment to be communicated 
    * to the activity and potentially other fragments contained in that 
    * activity. 
    * <p/> 
    * See the Android Training lesson <a href= 
    * "http://developer.android.com/training/basics/fragments/communicating.html" 
    * >Communicating with Other Fragments</a> for more information. 
    */ 

错误日志

06-14 23:40:50.069 11155-11155/com.buckydroid。 E/InputEventReceiver:异常调度输入事件。在MessageQueue回调中的异常: handleReceiveCallback 06-14 23:40:50.082 11155-11155/com.buckydroid。 app.droidcpu E/MessageQueue-JNI:java.lang.ClassCastException: com.buckydroid.app.droidcpu.ussdz无法转换为java.lang.String layout.ussd $ 1.onItemClick(ussd.java:92) 在android.widget.AbsListView $ PerformClick.run(AbsListView.java:3217) at android.widget.AbsListView.performItemClick(AbsListView.java:1169) at android.widget.AdapterView.performItemClick在android.widget.AbsListView.onT ouchUp(AbsListView.java:4074) 在android.widget.AbsListView.onTouchEvent(AbsListView.java:3838) 在android.view.View.dispatchTouchEvent(View.java:9301) 在 android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2547) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 在android.view.ViewGroup.dispatchTouchEvent( (ViewGroup.java:2553) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 在 com.android.internal.policy.PhoneWindow $ DecorView.superDispatchTouchEvent(PhoneWindow.java:2665) 在 com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1793) 在android.app.Activity .dispatchTouchEvent(Activity.java:3076) at com.android.internal.policy.PhoneWindow $ DecorView.dispatchTouchEvent(PhoneWindow.java:2626) at android.view.View.dispatchPointerEvent(View。Java的:9521) 在 android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4238) 在 android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess(ViewRootImpl.java:4104) 在 android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3650) 在 android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3703) 在 android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3669) 在 android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.jav答:3795) 在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3677) 在 android.view.ViewRootImpl $ AsyncInputStage.apply(ViewRootImpl.java:3852) 在 android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3650) 在 android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3703) 在 android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3669) 在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3677) at android.view .ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3650) 在android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5932) 在 android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5906) 的机器人。 view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5867) 在 android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6035) 在 android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 在android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQ ueue.next(MessageQueue.java:323) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5471) at java.lang.reflect。 Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 06-14 23:40:50.082 11155-11155/com.buckydroid.app.droidcpu D/AndroidRuntime:关闭VM 06-14 23:40:50.085 11155-11155/com.buckydroid.app.droidcpu E/AndroidRuntime :致命例外:main 进程:com.buckydroid.app.droidcpu,PID:11155 主题:主题:{default = overlay:com.zyxxeil.milos.ui, iconPack:com.zyxxeil.milos.ui,fontPkg:com.zyxxeil.milos.ui, com.android.systemui = overlay:com。 zyxxeil.milos.ui, com.android.systemui.navbar = overlay:com.zyxxeil.milos.ui} java.lang.ClassCastException:com.buckydroid.app.droidcpu.ussdz不能将 转换为java.lang。字符串 在layout.ussd $ 1.onItemClick(ussd.java:92) 在android.widget.AdapterView.performItemClick(AdapterView.java:310) 在android.widget.AbsListView.performItemClick(AbsListView.java:1169) 在android.widget.AbsListView $ PerformClick。运行(AbsListView.java:3217) 在android.widget.AbsListView.onTouchUp(AbsListView.java:4074) 在android.widget.AbsListView.onTouchEvent(AbsListView.java:3838) 在android.view.View.dispatchTouchEvent( View.java:9301) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2547) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240) 在 android.view.ViewGroup.dispatchTransformedTouchEvent( ViewGroup.java:2553) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) at androi d.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 在 com.android.internal.policy.PhoneWindow $ DecorView.superDispatchTouchEvent(PhoneWindow.java:2665) 在 com.android.internal.policy.PhoneWindow。 superDispatchTouchEvent(PhoneWindow.java:1793) 在android.app.Activity.dispatchTouchEvent(Activity.java:3076) 在 com.android.internal.policy.PhoneWindow $ DecorView.dispatchTouchEvent(PhoneWindow.java:2626) 在安卓.view.View.dispatchPointerEvent(View.java:9521) at android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:42 38) 在 android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess(ViewRootImpl.java:4104) 在 android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3650) 在 android.view.ViewRootImpl $ InputStage .onDeliverToNext(ViewRootImpl.java:3703) 在 android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3669) 在 android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.java:3795) 在安卓.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3677) at android.view.ViewRootImpl $ AsyncInputStage.apply(ViewRootImpl.java:3852) 在 android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3650) 在 android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl的.java:在 3703) 在 android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3669) 在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3677) android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3650) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl。Java的:5932) 在 android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5906) 在android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5867) 在 android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent( ViewRootImpl.java:6035) 在 android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 在android.os.MessageQueue.nativePollOnce(本机方法) 在android.os.MessageQueue.next(MessageQueue.java: 323) 在android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5471) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java :726) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

所以,如果我做错了什么在呼叫活动,请您帮助我。编译器显示没有错误。

回答

0

你的例外发生在这一行:

String item = (String)listView.getItemAtPosition(position); 

你想投的东西,是不是StringString。阅读错误日志,它说:

ClassCastException异常:com.buckydroid.app.droidcpu.ussdz不能转换为java.lang.String

你得到你的自定义类ussdz,并试图将其转换为String

只是看看你的代码,你甚至不使用String item的任何地方,你可以简单地将其删除并修复这个错误。如果你真的确实需要它,只是这样做:

ussdz item = listView.getItemAtPosition(position); 

因为这其中的ListView将返回类型。

旁注:建议您遵循Java的命名约定,例如命名开始用大写字母的类,并给予他们比ussdz多一些描述性的名称,因为这意味着什么别人读你的代码。这只是一个友好的建议。

+0

如何解决:( – bucky

+0

你是否看过我的整个答案?我其实涵盖了每一个案例。首先,如果你不需要'item',删除那一行(原因在你的代码中)不看你使用它)。 – Vucko

+0

反正第一个解决方案为我工作。二是仍然显示错误。如果你能知道的解决方案,那么请分享否则忽略我可以手动添加的所有条件。我没有足够的声誉给予好评的答案很抱歉:(对于..谢谢你这么多.. – bucky