膨胀有关设置长按事件侦听器异常 [英] Inflate Exception on setting up a long click event listener
问题描述
我最近开始使用Android,我遇到了我找不到是什么原因造成的问题。我使用主/从流量的标准模板。
布局:
< LinearLayout中的xmlns:机器人=http://schemas.android.com/apk/res/android
的xmlns:工具=http://schemas.android.com/tools
机器人:layout_width =match_parent
机器人:layout_height =match_parent
机器人:layout_marginLeft =16DP
机器人:layout_marginRight =16DP
机器人:baselineAligned =假
机器人:分=机器人:ATTR / dividerHorizontal
机器人:方向=横向
机器人: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屋!