标签: android

Android Fragment onAttach()已弃用

我已经更新了我的应用程序以使用最新的支持库(版本23.0.0),我发现他们已经弃用了Fragment类的onAttach()函数.

代替:

onAttach (Activity activity)
Run Code Online (Sandbox Code Playgroud)

下雪了:

onAttach (Context context)
Run Code Online (Sandbox Code Playgroud)

由于我的应用程序使用了弃用之前传递的活动,我认为可能的解决方案是:

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    activity = getActivity();
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?

更新:

如果我运行API低于23的设备,则甚至不会调用新的onAttach().我希望这不是他们打算做的!

更新2:

问题已通过SDK的最新更新得到解决.

我已经在我的API 22设备上进行了测试,并且正在调用onAttach(Context).

点击此处查看我几周前开设的错误报告以及Google员工的答案.

android android-fragments

317
推荐指数
6
解决办法
13万
查看次数

Android:java.lang.OutOfMemoryError:无法分配带有2097152个空闲字节的23970828字节分配和2MB直到OOM

我想在已存储的SD卡中显示ImageView中Bitmap图像.运行后我的应用程序崩溃并导致OutOfMemoryError错误:

(java.lang.OutOfMemoryError:无法分配带有2097152个空闲字节的23970828字节分配和2MB直到OOM)

我不知道或为什么它的内存不足.我认为我的图像尺寸非常大,所以我试图改变它.

Iterator<String> it = imageArray.iterator();
while (it.hasNext()) {
  Object element = it.next();
  String objElement = element.toString();
  Log.e("objElement ", " = " + objElement);
  final ImageView imageView = new ImageView (getContext());
  final ProgressBar pBar = new ProgressBar(getContext(), null, 
                                           android.R.attr.progressBarStyleSmall);
  imageView.setTag(it);
  pBar.setTag(it);

  imageView.setImageResource(R.drawable.img_placeholder);
  pBar.setVisibility(View.VISIBLE);

  if (objElement.endsWith(mp3_Pattern)) {
     Log.e("Mp3 ", " ends with ");
     pBar.setVisibility(View.GONE);
     imageView.setImageResource(R.drawable.audio_control);
  }
  if (objElement.endsWith(png_Pattern)) {
     Bitmap bitmap = BitmapFactory.decodeFile(objElement);
     int size = Math.min(bitmap.getWidth(), bitmap.getHeight());
     int x = (bitmap.getWidth() - size) …
Run Code Online (Sandbox Code Playgroud)

android android-bitmap

317
推荐指数
14
解决办法
35万
查看次数

LogCat消息:找不到Google Play服务资源.检查项目配置以确保包含资源

我有一个使用Google Maps Android v2 API的应用程序.我已将google-play-services_lib库项目添加到我的工作区,并根据这些页面上的说明从我的应用程序项目添加了对它的引用:

一切似乎都运行正常:应用程序使用默认标记显示地图和叠加层.所以我很确定我已经正确设置了Google Play服务和Google Maps API.

但是,每当初始化地图视图时(在第二代Nexus 7上),我都会在ADT LogCat窗口中看到此消息:

The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.
Run Code Online (Sandbox Code Playgroud)

消息级别为Error,标记为GooglePlayServicesUtil.

这似乎是良性的,因为我的应用程序确实工作正常.但我该怎么做或检查以试图解决可能出现的问题?


更多信息:每次在LogCat中显示"未找到Google Play服务资源"消息时,都会显示以下消息,即警告并标记ResourceType:

getEntry failing because entryIndex 906 is beyond type entryCount 3

Failure getting entry for 0x7f0b038a (t=10 e=906) in package 0 (error -2147483647)
Run Code Online (Sandbox Code Playgroud)

FWIW,我在搜索项目时找不到常量0x7f0b038a,包括gen/R.java文件.

我检查了生成的.apk的内容,它包含了google-play-services_lib/res目录中的所有资源.


另一个更新:添加ActionBarSherlock并将清单中的targetSdkVersion从8更新为17后,我现在看到LogCat输出中的另一个错误:

Could not find class 'maps.af.k', referenced from method 'maps.ag.an.a' …
Run Code Online (Sandbox Code Playgroud)

android google-maps google-play-services

316
推荐指数
6
解决办法
14万
查看次数

如何获取已安装的Android应用程序列表并选择一个运行

本周早些时候我问了一个类似的问题,但我仍然不了解如何获取所有已安装应用程序的列表,然后选择一个运行.

我试过了:

Intent intent = new Intent(ACTION_MAIN);
intent.addCategory(CATEGORY_LAUNCHER);
Run Code Online (Sandbox Code Playgroud)

这只显示预先安装的应用程序或可以运行ACTION_MAIN Intent类型的应用程序.

我也知道我可以使用PackageManager来获取所有已安装的应用程序,但是如何使用它来运行特定的应用程序呢?

android android-intent

314
推荐指数
14
解决办法
35万
查看次数

Android中状态栏的高度

Android中状态栏的高度是多少?总是一样的吗?

根据我的测量结果,它似乎是25dp,但我不确定它是否在所有平台上具有相同的高度.

(我想知道这是为了正确实现从没有状态栏的活动到执行状态栏的活动的淡入淡出过渡)

android statusbar

314
推荐指数
16
解决办法
33万
查看次数

如何在Android中调整位图大小?

我从远程数据库中获取了一个Base64字符串的位图,(encodedImage是用Base64表示图像的字符串):

profileImage = (ImageView)findViewById(R.id.profileImage);

byte[] imageAsBytes=null;
try {
    imageAsBytes = Base64.decode(encodedImage.getBytes());
} catch (IOException e) {e.printStackTrace();}

profileImage.setImageBitmap(
    BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)
);
Run Code Online (Sandbox Code Playgroud)

profileImage是我的ImageView

好的,但是我必须在显示我ImageView的布局之前调整此图像的大小.我必须将其调整为120x120.

有人能告诉我调整大小的代码吗?

我找到的示例无法应用于获得位图的base64字符串.

base64 android bitmap

314
推荐指数
8
解决办法
41万
查看次数

反转ArrayList的最简单方法是什么?

反转此ArrayList的最简单方法是什么?

ArrayList<Integer> aList = new ArrayList<>();

//Add elements to ArrayList object
aList.add("1");
aList.add("2");
aList.add("3");
aList.add("4");
aList.add("5");

while (aList.listIterator().hasPrevious())
  Log.d("reverse", "" + aList.listIterator().previous());
Run Code Online (Sandbox Code Playgroud)

java collections android arraylist

314
推荐指数
6
解决办法
30万
查看次数

Android上视图背景颜色的动画更改

如何动画Android上视图背景颜色的变化?

例如:

我有一个红色背景颜色的视图.视图的背景颜色变为蓝色.如何在颜色之间进行平滑过渡?

如果无法通过视图进行此操作,则欢迎使用其他选项.

animation android view background-color

313
推荐指数
16
解决办法
21万
查看次数

清除整个历史记录堆栈并在Android上启动新活动

是否可以在堆栈上启动活动,清除之前的整个历史记录?

情况

我有一个活动堆栈,可以是A-> B-> C或B-> C(屏幕A选择用户令牌,但许多用户只有一个令牌).

在屏幕C中,用户可以采取使屏幕B无效的动作,因此应用程序想要将它们带到屏幕A,而不管它是否已经在堆栈中.屏幕A应该是我的应用程序中堆栈上唯一的项目.

笔记

还有许多其他类似的问题,但我没有发现任何可以回答这个问题的问题.我试过调用getParent().finish()- 这总是导致空指针异常.FLAG_ACTIVITY_CLEAR_TOP仅在活动已在堆栈上时才有效.

android android-activity back-stack

313
推荐指数
10
解决办法
19万
查看次数

什么时候使用(匿名)内部类确切泄漏?

我一直在阅读一些有关Android内存泄漏的文章,并观看了Google I/O 关于此主题的有趣视频.

尽管如此,我还是不完全理解这个概念,特别是当在Activity中使用内部类是安全或危险的时候.

这就是我的理解:

如果内部类的实例比其外部类(活动)存活的时间更长,则会发生内存泄漏.- > 在哪种情况下会发生这种情况?

在这个例子中,我认为没有泄漏的风险,因为匿名类扩展没有办法OnClickListener比活动更长寿,对吧?

    final Dialog dialog = new Dialog(this);
    dialog.setContentView(R.layout.dialog_generic);
    Button okButton = (Button) dialog.findViewById(R.id.dialog_button_ok);
    TextView titleTv = (TextView) dialog.findViewById(R.id.dialog_generic_title);

    // *** Handle button click
    okButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            dialog.dismiss();
        }
    });

    titleTv.setText("dialog title");
    dialog.show();
Run Code Online (Sandbox Code Playgroud)

现在,这个例子是危险的,为什么?

// We are still inside an Activity
_handlerToDelayDroidMove = new Handler();
_handlerToDelayDroidMove.postDelayed(_droidPlayRunnable, 10000);

private Runnable _droidPlayRunnable = new Runnable() { 
    public void run() {
        _someFieldOfTheActivity.performLongCalculation(); …
Run Code Online (Sandbox Code Playgroud)

java android memory-leaks inner-classes

313
推荐指数
1
解决办法
5万
查看次数