preferenceFragment了java.lang.RuntimeException [英] PreferenceFragment java.lang.RuntimeException
问题描述
我遵循commonsware在这个链接单提供的样品头
和当我运行它,它给了我强制关闭下面的logcat,
任何意见将AP preciated,谢谢
logcat的:
致命异常:主要
了java.lang.RuntimeException:无法启动活动ComponentInfo
{com.commonsware.android。pref1header / com.commonsware.android。pref1header。
FragmentsDemo}:android.view.InflateException:二进制XML文件行#1:错误
充气类片段
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
在android.app.ActivityThread.access $ 1500(ActivityThread.java:117)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:935)
在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:130)
在android.app.ActivityThread.main(ActivityThread.java:3687)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:507)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:867)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
在dalvik.system.NativeStart.main(本机方法)
android.view.InflateException:引起二进制XML文件行#1:错误
充气类片段
在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:587)
在android.view.LayoutInflater.inflate(LayoutInflater.java:386)
在android.view.LayoutInflater.inflate(LayoutInflater.java:320)
在android.view.LayoutInflater.inflate(LayoutInflater.java:276)
在com.android.internal.policy.impl.PhoneWindow.setContentView
(PhoneWindow.java:216)
在android.app.Activity.setContentView(Activity.java:1660)
在com.commonsware.android。pref1header.FragmentsDemo.onCreate
(FragmentsDemo.java:28)
在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
... 11更多
android.support.v4.app.Fragment $ InstantiationException:产生的原因无法
实例片段
com.commonsware.android pref1header preferenceContentsFragment:。确保类
名称存在,是公开的,有一个空的构造是公开的
在android.support.v4.app.Fragment.instantiate(Fragment.java:401)
在android.support.v4.app.Fragment.instantiate(Fragment.java:369)
在android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272)
在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
... 19个
抛出java.lang.ClassNotFoundException:产生的原因:
com.commonsware.android。pref1header。装载机preferenceContentsFragment
dalvik.system.PathClassLoader [/data/app/com.commonsware.android.$p$pf1header-1.apk]
在dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
在java.lang.ClassLoader.loadClass(ClassLoader.java:551)
在java.lang.ClassLoader.loadClass(ClassLoader.java:511)
在android.support.v4.app.Fragment.instantiate(Fragment.java:391)
... 22个
Java类如下:
修改preferences:
公共类编辑preferences扩展$ P $ {pferenceActivity
私人布尔needResource = FALSE; @燮pressWarnings(德precation)
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState); 如果(needResource
|| Build.VERSION.SDK_INT< Build.VERSION_ codeS.HONEYCOMB){
加preferencesFromResource(R.xml preferences);
}
} @覆盖
公共无效onBuildHeaders(列表<页眉和GT;目标){
如果(onIsHidingHeaders()||!onIsMultiPane()){
needResource = TRUE;
}
其他{
loadHeadersFromResource(R.xml preference_headers,目标);
}
}
}
股票preferenceFragment:
公共类股票preferenceFragment扩展$ P $ {pferenceFragment
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState); INT解析度= getActivity()。getResources()。则getIdentifier(getArguments()的getString
(资源),XML,getActivity()getPackageName()); 加preferencesFromResource(RES);
}
}
preferenceContentsFragment:
公共类preferenceContentsFragment延伸片段{
私人TextView的复选框= NULL;
私人TextView的铃声= NULL;
私人TextView的checkbox2 = NULL;
私人TextView的文本= NULL;
私人TextView的名单= NULL; @覆盖
公共查看onCreateView(LayoutInflater吹气,ViewGroup中父母,
捆绑savedInstanceState){
查看结果= inflater.inflate(R.layout.content,父母,假); 复选框=(TextView中)result.findViewById(R.id.checkbox);
铃声=(TextView中)result.findViewById(R.id.ringtone);
checkbox2 =(TextView中)result.findViewById(R.id.checkbox2);
文字=(TextView的)result.findViewById(R.id.text);
名单=(TextView中)result.findViewById(R.id.list); 返回(结果);
} @覆盖
公共无效onResume(){
super.onResume(); 共享preferences preFS =
preferenceManager.getDefaultShared preferences(getActivity()); checkbox.setText(新布尔(prefs.getBoolean(复选框,FALSE))的toString());
ringtone.setText(prefs.getString(铃声,<未设置>中));
checkbox2.setText(新布尔(prefs.getBoolean(checkbox2,FALSE))的toString());
text.setText(prefs.getString(文字,<未设置>中));
list.setText(prefs.getString(名单,<未设置>中));
}
}
FragmentsDemo:
公共类FragmentsDemo扩展FragmentActivity {
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
} @覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
新MenuInflater(本).inflate(R.menu.actions,菜单); 回报(super.onCreateOptionsMenu(菜单));
} @覆盖
公共布尔onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例R.id.settings:
startActivity(新意图(这一点,编辑preferences.class)); 返回(真);
} 回报(super.onOptionsItemSelected(项目));
}
}
您更好的服务,让Eclipse中运行的过去异常点,并期待在LogCat中。
话虽这么说,你的问题是:
产生的原因:抛出java.lang.ClassNotFoundException:。com.commonsware.android pref1header preferenceContentsFragment
如果您移动应用到你自己的包,你需要调整其他文件相匹配,尤其是 RES / XML / preference_headers.xml
。
I follow the sample provided by commonsware in this link Single Header
and when i run it it gave me force close with below logcat ,
any advice will be appreciated , thanks
logcat :
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo
{com.commonsware.android.pref1header/com.commonsware.android.pref1header.
FragmentsDemo}: android.view.InflateException: Binary XML file line #1: Error
inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #1: Error
inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:587)
at android.view.LayoutInflater.inflate(LayoutInflater.java:386)
at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
at com.android.internal.policy.impl.PhoneWindow.setContentView
(PhoneWindow.java:216)
at android.app.Activity.setContentView(Activity.java:1660)
at com.commonsware.android.pref1header.FragmentsDemo.onCreate
(FragmentsDemo.java:28)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
... 11 more
Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to
instantiate fragment
com.commonsware.android.pref1header.PreferenceContentsFragment: make sure class
name exists, is public, and has an empty constructor that is public
at android.support.v4.app.Fragment.instantiate(Fragment.java:401)
at android.support.v4.app.Fragment.instantiate(Fragment.java:369)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
... 19 more
Caused by: java.lang.ClassNotFoundException:
com.commonsware.android.pref1header.PreferenceContentsFragment in loader
dalvik.system.PathClassLoader[/data/app/com.commonsware.android.pref1header-1.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at android.support.v4.app.Fragment.instantiate(Fragment.java:391)
... 22 more
JAVA class as follow :
EditPreferences:
public class EditPreferences extends PreferenceActivity {
private boolean needResource=false;
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (needResource
|| Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
addPreferencesFromResource(R.xml.preferences);
}
}
@Override
public void onBuildHeaders(List<Header> target) {
if (onIsHidingHeaders() || !onIsMultiPane()) {
needResource=true;
}
else {
loadHeadersFromResource(R.xml.preference_headers, target);
}
}
}
StockPreferenceFragment:
public class StockPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int res=
getActivity().getResources().getIdentifier(getArguments().getString
("resource"), "xml",getActivity().getPackageName());
addPreferencesFromResource(res);
}
}
PreferenceContentsFragment:
public class PreferenceContentsFragment extends Fragment {
private TextView checkbox=null;
private TextView ringtone=null;
private TextView checkbox2=null;
private TextView text=null;
private TextView list=null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent,
Bundle savedInstanceState) {
View result=inflater.inflate(R.layout.content, parent, false);
checkbox=(TextView)result.findViewById(R.id.checkbox);
ringtone=(TextView)result.findViewById(R.id.ringtone);
checkbox2=(TextView)result.findViewById(R.id.checkbox2);
text=(TextView)result.findViewById(R.id.text);
list=(TextView)result.findViewById(R.id.list);
return(result);
}
@Override
public void onResume() {
super.onResume();
SharedPreferences prefs=
PreferenceManager.getDefaultSharedPreferences(getActivity());
checkbox.setText(new Boolean(prefs.getBoolean("checkbox", false)).toString());
ringtone.setText(prefs.getString("ringtone", "<unset>"));
checkbox2.setText(new Boolean(prefs.getBoolean("checkbox2", false)).toString());
text.setText(prefs.getString("text", "<unset>"));
list.setText(prefs.getString("list", "<unset>"));
}
}
FragmentsDemo:
public class FragmentsDemo extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
new MenuInflater(this).inflate(R.menu.actions, menu);
return(super.onCreateOptionsMenu(menu));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.settings:
startActivity(new Intent(this, EditPreferences.class));
return(true);
}
return(super.onOptionsItemSelected(item));
}
}
You are better served letting Eclipse run past the point of the exception and look at LogCat.
That being said, your problem is:
Caused by: java.lang.ClassNotFoundException: com.commonsware.android.pref1header.PreferenceContentsFragment
If you moved the app into your own package, you need to adjust the other files to match, notably res/xml/preference_headers.xml
.
这篇关于preferenceFragment了java.lang.RuntimeException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!