我有一个名为Activity的whereActity子对话框.现在,我想将此活动显示为另一个活动的对话框.
我怎样才能做到这一点?

我来自iOS,这很容易,你只需使用UIViewController.然而,在Android中,事情看起来要复杂得多,某些UIComponents用于特定的API级别.我正在阅读BigNerdRanch for Android(这本书大约有2年了),他们建议我Activity用来托管我的FragmentActivities.但是,我认为Activity已被弃用.
因此,对于API级别22(对API级别15或16的最低支持),我应该使用什么来托管组件以及组件本身?是否有所有这些用途,或者我应该几乎完全使用一两个?
android android-fragments android-activity android-actionbaractivity appcompatactivity
我正在编写我的第一个Android应用程序,并试图了解服务和活动之间的沟通.我有一个将在后台运行的服务,并执行一些基于gps和时间的日志记录.我将有一个用于启动和停止服务的活动.
首先,我需要能够在Activity启动时确定服务是否正在运行.这里还有其他一些问题,所以我想我可以搞清楚(但随意提供建议).
我的真正问题:如果Activity正在运行且服务已启动,我需要一种方法让服务向Activity发送消息.此时简单的字符串和整数 - 主要是状态消息.消息不会定期发生,因此如果有其他方法,我认为轮询服务不是一个好方法.我只想在用户启动Activity时进行此通信 - 我不想从服务启动Activity.换句话说,如果您启动Activity并且服务正在运行,那么当有趣的事情发生时,您将在Activity UI中看到一些状态消息.如果你没有启动Activity,你将看不到这些消息(它们并不那么有趣).
看起来我应该能够确定服务是否正在运行,如果是,则将Activity添加为侦听器.然后在"活动"暂停或停止时将"活动"作为侦听器删除.这有可能吗?我能想到的唯一方法是让Activity实现Parcelable并构建一个AIDL文件,这样我就可以通过Service的远程接口传递它.这看起来有点矫枉过正,我不知道Activity应该如何实现writeToParcel()/ readFromParcel().
有更简单或更好的方法吗?谢谢你的帮助.
编辑:
对于后来对此感兴趣的任何人,都有来自Google的示例代码,用于通过示例目录中的AIDL处理此问题:/apis/app/RemoteService.java
我已经成功实现onRetainNonConfigurationInstance()了我的主要功能,Activity以保存和恢复屏幕方向更改中的某些关键组件.
但看起来,当方向发生变化时,我的自定义视图将从头开始重新创建.这是有道理的,虽然在我的情况下它很不方便,因为所讨论的自定义视图是X/Y图,并且绘制的点存储在自定义视图中.
是否有一种狡猾的方法来实现类似于onRetainNonConfigurationInstance()自定义视图的东西,或者我是否需要在自定义视图中实现允许我获取并设置其"状态"的方法?
我在用
Window w = getWindow();
w.setTitle("My title");
Run Code Online (Sandbox Code Playgroud)
更改我当前活动的标题,但它似乎不起作用.
任何人都可以指导我如何改变这个?
首先,我知道不应该在Android上杀死/重启应用程序.在我的用例中,我想在服务器向客户端发送特定信息的特定情况下出厂重置我的应用程序.
用户只能使用应用程序的一个实例登录服务器(即不允许多个设备).如果另一个实例获得"登录"锁定,那么该用户的所有其他实例都必须删除其数据(工厂重置),以保持一致性.
可以强制获取锁定,因为用户可能会删除应用程序并重新安装它,这将导致不同的实例ID,并且用户将无法再释放锁定.因此可以强行锁定.
由于这种力的可能性,我们需要始终检查具有锁定的具体实例.这是(几乎)对服务器的每个请求完成的.服务器可能会发送"error-lock-id".如果检测到,则客户端应用程序必须删除所有内容.
那是用例.不执行问题:
我有一个ActivityA启动Login ActivityL或应用程序的主ActivityB,具体取决于sharedPrefs字段.在启动L或B后,它自行关闭,只有L或B运行.因此,在用户已登录的情况下,B现在正在运行.
B开始C. C调用startService为IntentServiceD.导致这个堆栈:
(A)> B> C> D.
从D的onHandleIntent方法,事件被发送到ResultReceiver R.
R现在通过向用户提供一个对话框来处理该事件,在该对话框中他可以选择出厂重置应用程序(删除数据库,sharedPrefs等)
出厂重置后,我想重新启动应用程序(关闭所有活动),然后再次启动A,然后启动登录ActivityL并自行完成:
(A)> L.
Dialog的onClick方法如下所示:
@Override
public void onClick(DialogInterface dialog, int which) {
// Will call onCancelListener
MyApplication.factoryReset(); // (Deletes the database, clears sharedPrefs, etc.)
Intent i = new Intent(MyApp.getContext(), A.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MyApp.getContext().startActivity(i);
}
Run Code Online (Sandbox Code Playgroud)
这就是MyApp班级:
public class MyApp extends Application {
private static Context context;
@Override
public void onCreate() { …Run Code Online (Sandbox Code Playgroud) 我有一个使用Theme.Dialog样式的活动,这是一个浮动窗口,而不是另一个活动.但是,当我在对话框窗口外部(在背景活动上)单击时,对话框将关闭.我怎么能阻止这种行为?
Activity在Android中重新加载是一个好习惯吗?
最好的方法是什么?this.finish然后this.startActivity与活动Intent?
我制作了一个工作的导航抽屉,就像它在developer.android.com网站上的教程中所示.但现在,我想使用一个导航抽屉,我在NavigationDrawer.class中为我的应用程序中的多个活动创建.
我的问题是,如果这里有人可以制作一个小教程,这解释了如何使用一个导航抽屉进行多个活动.
我在多个活动的答案Android导航抽屉上首先阅读了它
但它对我的项目不起作用
public class NavigationDrawer extends Activity {
public DrawerLayout drawerLayout;
public ListView drawerList;
private ActionBarDrawerToggle drawerToggle;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerToggle = new ActionBarDrawerToggle((Activity) this, drawerLayout, R.drawable.ic_drawer, 0, 0) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(R.string.app_name);
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(R.string.menu);
}
};
drawerLayout.setDrawerListener(drawerToggle);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
layers = getResources().getStringArray(R.array.layers_array);
drawerList = (ListView) findViewById(R.id.left_drawer);
View header = getLayoutInflater().inflate(R.layout.drawer_list_header, null);
drawerList.addHeaderView(header, null, false);
drawerList.setAdapter(new ArrayAdapter<String>(this, …Run Code Online (Sandbox Code Playgroud) navigation android drawer android-activity navigation-drawer
在我的Android应用程序中,我有两个活动类.我在第一个按钮上有一个按钮,我想在点击它时显示第二个按钮,但是我收到错误.以下是课程:
public class FirstActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button orderButton = (Button)findViewById(R.id.order);
orderButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(FirstActivity.this, OrderScreen.class);
startActivity(intent);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
单击按钮时应显示的第二个类,但从不执行:
public class OrderScreen extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.order);
Button orderButton = (Button) findViewById(R.id.end);
orderButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
如何创建一个显示第二个活动的按钮?