GVKun编程网logo

android – 为什么Activity在onBackPressed()中调用finish()后没有完成或销毁?(activity cannot be resolved to a type)

5

想了解android–为什么Activity在onBackPressed()中调用finish()后没有完成或销毁?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于activitycanno

想了解android – 为什么Activity在onBackPressed()中调用finish()后没有完成或销毁?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于activity cannot be resolved to a type的相关问题,此外,我们还将为您介绍关于Android ActionBar 返回父级 Activity、Android Activity 调用startActivityForResult之后被销毁?、Android AppCompatActivity的ActionBar之SearchView、ShareActionProvider以及menu、Android NDK:如何在没有java的情况下覆盖NativeActivity中的onBackPressed?的新知识。

本文目录一览:

android – 为什么Activity在onBackPressed()中调用finish()后没有完成或销毁?(activity cannot be resolved to a type)

android – 为什么Activity在onBackPressed()中调用finish()后没有完成或销毁?(activity cannot be resolved to a type)

朋友在我的活动中,我已经在onBackpressed()中放置了finish(),有时它还没有完成或破坏活动..问题是什么?

解决方法

super.onBackpressed()将为你做最后的事情,所以在重写这个函数后不要注释这一行.如果你有任何…在这个函数中添加你的额外功能…

Android ActionBar 返回父级 Activity

Android ActionBar 返回父级 Activity

当子级 Activity 继承 ActionBarActivity 类之后

当运行在 Android 4.1 (API level 16) 或更高版本,或者使用 Support 库中的 ActionBarActivity 时,实现向上导航需要在 manifest 文件中声明父 activity ,同时在 action bar 中设置向上按钮可用。

子级 Activity 声明

<activity
           android:name="{子级包名}"
            android:parentActivityName="{父级包名}">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="{父级包名}"/>
</activity>

Android Activity 调用startActivityForResult之后被销毁?

Android Activity 调用startActivityForResult之后被销毁?

Android Activity 调用startActivityForResult之后调用的Activity被销毁的问题

最近在华为的手机上面发现Activity调用startActivityForResult后返回结果时,调用的Activity都会被重新创建,也就是Activity被销毁了。 在网上经过一番查找,发现有哥们说在手机开发人员选项里面有这么一项“不保留活动”被勾上了, 一看还真是。 把那个勾去掉一切又恢复正常了。

Android AppCompatActivity的ActionBar之SearchView、ShareActionProvider以及menu

Android AppCompatActivity的ActionBar之SearchView、ShareActionProvider以及menu



Android AppCompatActivity的ActionBar之SearchView、ShareActionProvider以及menu

Android早期推出的ActionBarActivity被Android谷歌官方废弃,推荐使用AppCompatActivity替代ActionBarActivity。在实际的开发中现在也基本上不再怎么使用ActionBar,而是使用最新的Toolbar替代ActionBar了,但是ActionBar也有其自身比较有特点的地方,比如ActionBar自身对SearchView,ShareActionProvider的良好支持,使得ActionBar在某些应用开发场景中依然有其用武之地。
现在给出一个例子说明如何在一个ActionBar中实现SearchView和ShareActionProvider。
先把完整的代码实现给出,然后结合代码加以说明。
测试用的主Activity,MainActivity.java:

package zhangphil.toolbar;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.view.MenuItemCompat.OnActionExpandListener;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.SearchView.OnQueryTextListener;
import android.support.v7.widget.ShareActionProvider;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		ActionBar ab = this.getSupportActionBar();
		ab.setDisplayHomeAsUpEnabled(true);
	}

	private Intent getMyIntent() {
		Intent intent = new Intent(Intent.ACTION_SEND);
		intent.setType("text/plain");
		intent.putExtra(Intent.EXTRA_SUBJECT, "主题");
		intent.putExtra(Intent.EXTRA_TEXT, "我的文字内容,zhangphil text");
		return intent;
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);

		MenuItem searchItem = menu.findItem(R.id.search);
		SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
		searchView.setOnQueryTextListener(new OnQueryTextListener() {
			@Override
			public boolean onQueryTextChange(String queryText) {
				Toast.makeText(getApplicationContext(), "onQueryTextChange:" + queryText, Toast.LENGTH_SHORT).show();
				return true;
			}

			@Override
			public boolean onQueryTextSubmit(String queryText) {
				Toast.makeText(getApplicationContext(), "onQueryTextSubmit:" + queryText, Toast.LENGTH_SHORT).show();
				return true;
			}
		});

		OnActionExpandListener expandListener = new OnActionExpandListener() {
			@Override
			public boolean onMenuItemActionCollapse(MenuItem item) {
				Toast.makeText(getApplicationContext(), "onMenuItemActionCollapse", Toast.LENGTH_SHORT).show();
				return true;
			}

			@Override
			public boolean onMenuItemActionExpand(MenuItem item) {
				Toast.makeText(getApplicationContext(), "onMenuItemActionExpand", Toast.LENGTH_SHORT).show();
				return true;
			}
		};

		MenuItemCompat.setOnActionExpandListener(searchItem, expandListener);

		MenuItem shareItem = menu.findItem(R.id.share);
		ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);
		shareActionProvider.setShareIntent(getMyIntent());

		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {

		case R.id.share:
			Toast.makeText(getApplicationContext(), "分享", Toast.LENGTH_SHORT).show();
			return true;

		case R.id.setting:
			Toast.makeText(getApplicationContext(), "设置", Toast.LENGTH_SHORT).show();
			return true;

		case R.id.about:
			Toast.makeText(getApplicationContext(), "关于", Toast.LENGTH_SHORT).show();
			return true;

		default:
			return super.onOptionsItemSelected(item);
		}
	}
}


在本例中,MainActivity.java不依赖任何布局文件,只是需要加载menu菜单,所以需要在res/menu/目录下写一个menu菜单的XML文件,定义menu的item,此代码文件在本例中称之为main.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" >

    <item
        android:id="@+id/search"
        android:title="搜索"
        app:actionViewapp:showAsAction="ifRoom|collapseActionView"/>
    <item
        android:id="@+id/share"
        android:title="分享"
        app:actionProviderapp:showAsAction="ifRoom|withText"/>
    <item
        android:id="@+id/setting"
        android:title="设置"
        app:showAsAction="never"/>
    <item
        android:id="@+id/about"
        android:title="关于"
        app:showAsAction="ifRoom"/>

</menu>

在MainActivity.java中的一个方法体中,重写:
public boolean onCreateOptionsMenu(Menu menu);
方法将依据res/menu/main.xml文件创建菜单。在这个方法中,为id为search的menu item创建响应搜索事件。同时,附带的为搜索item绑定了展开和收缩事件:

OnActionExpandListener expandListener = new OnActionExpandListener() {
			@Override
			public boolean onMenuItemActionCollapse(MenuItem item) {
				Toast.makeText(getApplicationContext(), "onMenuItemActionCollapse", Toast.LENGTH_SHORT).show();
				return true;
			}

			@Override
			public boolean onMenuItemActionExpand(MenuItem item) {
				Toast.makeText(getApplicationContext(), "onMenuItemActionExpand", Toast.LENGTH_SHORT).show();
				return true;
			}
		};

		MenuItemCompat.setOnActionExpandListener(searchItem, expandListener);


对于菜单中分享菜单share item,则为其设置了ShareActionProvider,提供分享事件的数据和动作支持:

MenuItem shareItem = menu.findItem(R.id.share);
		ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);
		shareActionProvider.setShareIntent(getMyIntent());


其他次要普通的菜单选择事件则放在
public boolean onOptionsItemSelected(MenuItem item);
中完成。


图1是代码运行后,点击分享icon切换到微信的ActionBar状态:




图2则是点击了搜索item时候的ActionBar状态:


Android NDK:如何在没有java的情况下覆盖NativeActivity中的onBackPressed?

Android NDK:如何在没有java的情况下覆盖NativeActivity中的onBackPressed?

我的应用程序完全使用NativeActivity以C/C++编写,它没有 Java代码(基于“本机活动”NDK示例).按“后退”按钮将其关闭(破坏活动),但我需要此按钮的其他行为,因为我有自己的UI和通过OpenGL显示的菜单.

As I read,为了改变“后退”按钮的行为,我需要覆盖Java活动类的onBackpressed()方法.但是我不使用Java,我可以从C/C++到达这个方法来覆盖它吗?

如果没有,是否有其他方法使用NDK处理“后退”按钮,没有Java代码?

解决方法

解决:为防止默认“后退”按钮行为,处理键事件时返回1就足够了:
int32_t app_handle_event(struct android_apP* app,AInputEvent* event) {
    if (AKeyEvent_getKeyCode(event) == AKEYCODE_BACK) {
        // actions on back key
        return 1; // <-- prevent default handler
    };
    // ...
    return 0;
}

关于android – 为什么Activity在onBackPressed()中调用finish()后没有完成或销毁?activity cannot be resolved to a type的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android ActionBar 返回父级 Activity、Android Activity 调用startActivityForResult之后被销毁?、Android AppCompatActivity的ActionBar之SearchView、ShareActionProvider以及menu、Android NDK:如何在没有java的情况下覆盖NativeActivity中的onBackPressed?等相关知识的信息别忘了在本站进行查找喔。

本文标签: