膨胀有关设置长按事件侦听器异常 [英] Inflate Exception on setting up a long click event listener

查看:277
本文介绍了膨胀有关设置长按事件侦听器异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近开始使用Android,我遇到了我找不到是什么原因造成的问题。我使用主/从流量的标准模板。

布局:

 < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
的xmlns:工具=htt​​p://schemas.android.com/tool​​s
机器人:layout_width =match_parent
机器人:layout_height =match_parent
机器人:layout_marginLeft =16DP
机器人:layout_marginRight =16DP
机器人:baselineAligned =假
机器人:分=机器人:ATTR / dividerHorizo​​ntal
机器人:方向=横向
机器人:showDividers =中间
工具:上下文=TasksListActivity。><片段
    机器人:ID =@ + ID / tasks_list
    机器人:名字=bg.pandasoft.task_2_do.TasksListFragment
    机器人:layout_width =0dp
    机器人:layout_height =match_parent
    机器人:layout_weight =1    工具:布局=@安卓布局/ list_content/><的FrameLayout
    机器人:ID =@ + ID / tasks_detail_container
    机器人:layout_width =0dp
    机器人:layout_height =match_parent
    机器人:layout_weight =3/>< / LinearLayout中>

该tasks_list片段握着我的类别和我试图在其片段处理程序做到这一点:

 公共无效的onCreate(捆绑savedInstanceState){
  super.onCreate(savedInstanceState);
  SQL =新SQLCat(getActivity());
  BuildList();
  getListView()。setOnItemLongClickListener(新OnItemLongClickListener(){        @覆盖
        公共布尔onItemLongClick(适配器视图<>母公司,观景,
                INT位置,长的id){
            分类项目= _CatAdapter.getItem(位置);
            CAT_KEY = item.GetKey();
            如果(item.GetDeletable()== 0){
                Toast.makeText(getActivity(),类别+ item.GetName()
                        +不能编辑或删除。GLOBAL.ToastDuration);
            }其他{
                AlertDialog.Builder alertDialog =新AlertDialog.Builder(
                        getActivity());
                alertDialog.setTitle(操作);
                alertDialog.setSingleChoiceItems(数组,-1,
                        新DialogInterface.OnClickListener(){
                            @覆盖
                            公共无效的onClick(DialogInterface对话框,
                                    其中INT){
                                如果(它== 0){
                                    deleteEntry();
                                    BuildList();
                                }否则如果(它== 1){
                                    分类项= _CatAdapter
                                            .getItemById(CAT_KEY);
                                    AccessEditScreen(item.GetKey(),FALSE);
                                }
                                dialog.cancel();
                            }
                        });
                alertDialog.show();
            }
            返回true;
        }
    });

问题是,当调试器到达此行这一切与膨胀异常炸毁。正是我试图做可能吗?还是我走错了方向的地方?

------- -------编辑
误差如下:

 致命异常:主要
 了java.lang.RuntimeException:无法启动活动ComponentInfo {bg.pandasoft.task_2_do / bg.pandasoft.task_2_do.TasksListActivity}:android.view.InflateException:二进制XML文件行#13:错误充气类片段
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2245)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2295)
在android.app.ActivityThread.access $ 700(ActivityThread.java:150)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1280)
在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:175)
在android.app.ActivityThread.main(ActivityThread.java:5279)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1102)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
在dalvik.system.NativeStart.main(本机方法)
 android.view.InflateException:引起二进制XML文件行#13:错误充气类片段
在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710)
在android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
在android.view.LayoutInflater.inflate(LayoutInflater.java:495)
在android.view.LayoutInflater.inflate(LayoutInflater.java:397)
在android.view.LayoutInflater.inflate(LayoutInflater.java:353)
在com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:350)
在android.app.Activity.setContentView(Activity.java:1930)
在bg.pandasoft.task_2_do.TasksListActivity.onCreate(TasksListActivity.java:20)
在android.app.Activity.performCreate(Activity.java:5283)
在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
... 11更多
 java.lang.IllegalStateException:引起内容视图尚未创建
在android.support.v4.app.ListFragment.ensureList(ListFragment.java:328)
在android.support.v4.app.ListFragment.getListView(ListFragment.java:222)
在bg.pandasoft.task_2_do.TasksListFragment.onCreate(TasksListFragment.java:62)
在android.support.v4.app.Fragment.performCreate(Fragment.java:1477)
在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:893)
在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1082)
在android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1184)
在android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:291)
在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:682)
...... 21多


解决方案

的问题是, getListView()直到片段视图中创建不能返回列表。请参阅片段寿命周期:

你可以看到的onCreate()回调之前得到 onCreateView称为(),这意味着碎片查看(在你的情况下,它的列表)还没有被夸大。
所以,后来活动开始,并试图创建片段 - 它得到应有例外,在 getListView()检查列表就绪状态。
你需要调用 getListView()和realted code在 onCreateView()。了解更多关于片段上d.android.com

I recently started with android and I encountered an issue that I can't find what is causing it. I am using the standard template for Master/Slave flow.

Layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:baselineAligned="false"
android:divider="?android:attr/dividerHorizontal"
android:orientation="horizontal"
android:showDividers="middle"
tools:context=".TasksListActivity" >

<fragment
    android:id="@+id/tasks_list"
    android:name="bg.pandasoft.task_2_do.TasksListFragment"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"

    tools:layout="@android:layout/list_content" />

<FrameLayout
    android:id="@+id/tasks_detail_container"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="3" />

</LinearLayout>

The tasks_list fragment is holding my categories and I tried do this in its fragment handler:

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  sql = new SQLCat(getActivity());
  BuildList();
  getListView().setOnItemLongClickListener(new OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view,
                int position, long id) {
            Categories item = _CatAdapter.getItem(position);
            CAT_KEY = item.GetKey();
            if (item.GetDeletable() == 0) {
                Toast.makeText(getActivity(), "Category '" + item.GetName()
                        + "' cannot be edited or deleted.", GLOBAL.ToastDuration);
            } else {
                AlertDialog.Builder alertDialog = new AlertDialog.Builder(
                        getActivity());
                alertDialog.setTitle("Actions");
                alertDialog.setSingleChoiceItems(array, -1,
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                if (which == 0) {
                                    deleteEntry();
                                    BuildList();
                                } else if (which == 1) {
                                    Categories item = _CatAdapter
                                            .getItemById(CAT_KEY);
                                    AccessEditScreen(item.GetKey(), false);
                                }
                                dialog.cancel();
                            }
                        });
                alertDialog.show();
            }
            return true;
        }
    });

The problem is that when the debugger hits this row it all blows up with an Inflate Exception. Is what I am trying to do possible? Or have I taken a wrong turn somewhere?

-------EDIT------- The error is as follows:

 FATAL EXCEPTION: main
 java.lang.RuntimeException: Unable to start activity     ComponentInfo{bg.pandasoft.task_2_do/bg.pandasoft.task_2_do.TasksListActivity}:   android.view.InflateException: Binary XML file line #13: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2295)
at android.app.ActivityThread.access$700(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:175)
at android.app.ActivityThread.main(ActivityThread.java:5279)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
 Caused by: android.view.InflateException: Binary XML file line #13: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:350)
at android.app.Activity.setContentView(Activity.java:1930)
at bg.pandasoft.task_2_do.TasksListActivity.onCreate(TasksListActivity.java:20)
at android.app.Activity.performCreate(Activity.java:5283)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
... 11 more
 Caused by: java.lang.IllegalStateException: Content view not yet created
at android.support.v4.app.ListFragment.ensureList(ListFragment.java:328)
at android.support.v4.app.ListFragment.getListView(ListFragment.java:222)
at bg.pandasoft.task_2_do.TasksListFragment.onCreate(TasksListFragment.java:62)
at android.support.v4.app.Fragment.performCreate(Fragment.java:1477)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:893)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1082)
at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1184)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:291)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:682)
... 21 more

解决方案

The problem is that getListView() cannot return list until fragments View created. Refer to Fragment life-circle:

As You can see onCreate() callback get called before onCreateView(), which means that fragments view (in your case it's list) haven't been inflated yet. So, then activity starts and tries to create fragment - it get exception due to check inside getListView() for list ready state. You need to call getListView() and realted code in onCreateView(). Read more about fragments on d.android.com.

这篇关于膨胀有关设置长按事件侦听器异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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