除了一件事,我的PreferenceActivity工作得很好.ActionBar图标完美地将用户返回到我所有其他活动中的上一个活动,但在PreferenceActivity中不起作用.当我点击图标时,它会闪烁,好像它将返回上一个活动,但PreferenceActivity保留在屏幕上.有趣的是,后退按钮确实将用户返回到上一个活动.有没有办法让ActionBar的Home图标在PreferenceActivity中"正常"工作?
这是代码:
public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set actionBar controls for Settings
TextView actionBarTitle = (TextView) findViewById(Resources.getSystem().getIdentifier("action_bar_title", "id", "android"));
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setIcon(R.drawable.ic_launcher);
actionBar.setDisplayShowTitleEnabled(true);
actionBarTitle.setTextColor(Color.WHITE);
actionBarTitle.setTextSize(16);
actionBar.setTitle(R.string.settings_menu_title);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { //Build.VERSION_CODES.ICE_CREAM_SANDWICH
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true); // show back arrow on title icon
actionBar.setDisplayShowHomeEnabled(true);
}
...... Handle prefs (all working fine).....
}
Run Code Online (Sandbox Code Playgroud)
}
//////和电话代码////////
//Use menu button to access settings screen
@Override
public boolean onKeyDown(int keycode, KeyEvent e) { …Run Code Online (Sandbox Code Playgroud) 当我从Eclipse"运行为Android应用程序"时,我的应用程序运行完美.在过去,我还成功导出了应用程序的签名版本.
现在,突然导出的应用程序版本立即崩溃.关键信息似乎是
引起:aaaab:所选的LogFactory实现不会扩展LogFactory.请检查您的配置.(由java.lang.ClassCastException引起:应用程序已指定应使用自定义LogFactory实现,但Class'org.apache.commons.logging.impl.LogFactoryImpl'无法转换为'aaaac'.请检查自定义实现.可以在http://commons.apache.org/logging/troubleshooting.html找到帮助.).
以下是Proguard设置.我错过了什么吗?
-dontwarn org.apache.**
-dontwarn org.apache.commons.logging.**
-ignorewarnings
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
Run Code Online (Sandbox Code Playgroud)
只有在运行时动态加载的实现类可以强制转换为加载它的LogFactory类时,才能使用自定义LogFactory实现.有几种方法可以使这个演员失败.最明显的是源代码实际上可能不会扩展LogFactory.源可能是兼容的,但如果编译源的LogFactory类不是二进制兼容的,则转换也将失败.
还有另一种更不寻常的方式,这种方法可能会失败:即使二进制文件兼容,运行时加载的实现类也可能链接到LogFactory类的不同实例.有关更多信息,请参阅技术指南.
在使用自定义LogFactory实现的容器中可能会遇到这种情况.该实现通常将与JCL一起在共享的高级类加载器中提供.当应用程序类加载器包含LogFactory时,将从该更高级别的类加载器加载实现.实现类将链接到更高级别的类加载器加载的LogFactory类.即使LogFactory实现是二进制兼容的,由于它们由不同的类加载器加载,因此两个LogFactory类实例不相等,因此转换必须失败.
他们继续说可能的修复包括:
有多种方法可以解决这个问题.哪种修复是正确的取决于具体情况.
如果您对使用应用程序的另一个类加载策略感到满意,请选择一个类加载策略,以确保从包含自定义实现的共享类加载器加载LogFactory.
如果要绕过容器适配机制,请在启动容器时将相应的系统属性设置为默认值:
-Dorg.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.LogFactoryImpl
如果要继续使用默认容器机制,则:•查找并替换容器使用的commons-logging实现与最现代的版本•使用commons-logging-adapters jar替换应用程序中的commons-logging jar.这将确保应用程序类加载器在加载LogFactory时将委托给它的父级.
我认为"-Dorg.apache.commons ......"命令会进入proguard-project.txt文件,但这导致应用程序甚至无法构建.所以底线,我不明白apache试图说什么,我希望你们中的一些经验丰富的人可以提供一些清晰度/指导.
这是堆栈跟踪:
07-22 02:49:32.109: E/AndroidRuntime(13589): FATAL EXCEPTION: AsyncTask #1
07-22 02:49:32.109: E/AndroidRuntime(13589): java.lang.RuntimeException: An error occured while executing doInBackground()
07-22 02:49:32.109: E/AndroidRuntime(13589): at android.os.AsyncTask$3.done(AsyncTask.java:299)
07-22 02:49:32.109: E/AndroidRuntime(13589): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
07-22 02:49:32.109: E/AndroidRuntime(13589): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
07-22 02:49:32.109: E/AndroidRuntime(13589): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
07-22 02:49:32.109: E/AndroidRuntime(13589): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-22 02:49:32.109: E/AndroidRuntime(13589): at …Run Code Online (Sandbox Code Playgroud) 我在另一个Activity类中使用了相同的模式,它完美地运行.但是在这个类(也是一个Activity)中,从不调用getView .我通过记录fbFriendMatchAdapter.getCount()确认适配器中有9个项目.我已经尝试将数据源更改为String []变量,但这对getView的(缺少)没有影响.
我很感激任何建议!我已经彻底研究过了.这个问题有很多种,但都没有解决我的问题.这就是我发布新问题的原因.
//Here is the ArrayList data source definition.
//It is loaded using a for loop with 9 values.
private List<String> fbFriendMatchAdapter=new ArrayList<String>();
// Here is the Custom Array Adapter
ArrayAdapter<String> fbFriendMatchAdapter = new ArrayAdapter<String>(this,
R.layout.row_left, R.id.ListViewName, fbFriendPotentialMatchArrayList) {
@Override
public View getView(final int dialogPosition, View convertView, ViewGroup listParent) {
LayoutInflater inflater = getLayoutInflater();
View fbFriendMatchDialogViewRow = inflater.inflate(R.layout.row_left, listParent, false);
Log.d(BBTAG, String.format("BBSetup getView[%s] name=%s", dialogPosition, buddyDisplayName ));
return fbFriendMatchDialogViewRow;
} // [END getView]
@Override
public String …Run Code Online (Sandbox Code Playgroud)