Android以正确的方式启动活动
我是android开发者的新手。Android以正确的方式启动活动,android,android-activity,Android,Android Activity,我是android开发者的新手。 我先学习一些教程,然后制作一个简单的应用程序。 我对开始其他活动的方式感到困惑 我有3个活动login,main,temp 当我在主活动时,我想通过以下代码启动临时活动: @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); Intent nextIntent; swit
我先学习一些教程,然后制作一个简单的应用程序。
我对开始其他
活动的方式感到困惑
我有3个活动
login
,main
,temp
当我在
主活动
时,我想通过以下代码启动临时活动
:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
Intent nextIntent;
switch (id){
case R.id.item1:
nextIntent = new Intent(MainActivity.this, TempActivity.class);
startActivity(nextIntent);
overridePendingTransition(R.anim.pull_in_right, R.anim.push_out_left);
break;
case R.id.item2:
nextIntent = new Intent(MainActivity.this, TempActivity.class);
startActivity(nextIntent);
overridePendingTransition(R.anim.pull_in_right, R.anim.push_out_left);
break;
case R.id.item3:
nextIntent = new Intent(MainActivity.this, TempActivity.class);
startActivity(nextIntent);
overridePendingTransition(R.anim.pull_in_right, R.anim.push_out_left);
break;
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
我在登录活动中也做了同样的操作,但没有工作:
private void login() {
Log.d(TAG, "Login");
_loginButton.setEnabled(false);
//show spinner
final ProgressDialog progressDialog = new ProgressDialog(LoginActivity.this,
R.style.AppTheme_Dark_Dialog);
progressDialog.setIndeterminate(true);
progressDialog.setMessage("Authenticating...");
progressDialog.show();
// TODO: Implement your own authentication logic here.
new android.os.Handler().postDelayed(
new Runnable() {
public void run() {
// On complete call either onLoginSuccess or onLoginFailed
onLoginSuccess();
// onLoginFailed();
progressDialog.dismiss();
}
}, 3000);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == requestCode) {
if (resultCode == RESULT_OK) {
// TODO: Implement successful signup logic here
// By default we just finish the Activity and log them in automatically
startActivity(new Intent(this, MainActivity.class));
this.finish();
}
}
}
public void onLoginSuccess() {
//do nothing
finish();
}
相反,我必须这样做:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == requestCode) {
if (resultCode == RESULT_OK) {
// TODO: Implement successful signup logic here
// By default we just finish the Activity and log them in automatically
this.finish();
}
}
}
public void onLoginSuccess() {
startActivity(new Intent(this, MainActivity.class));
setResult(RESULT_OK);
finish();
}
以及为什么requestCode==requestCode
我找不到函数setRequestCode
比如setResultCode
最后一个问题:我是否应该使用片段
而不是活动
来共享我的导航栏
,因为现在我必须将导航栏
布局包含到临时活动
布局中,并且在类中使用相同的java代码
您可以从这些代码中获得帮助:
公共类ListActivityExample扩展ListActivity{
静态最终字符串[]活动\u选项=新字符串[]{
“开放网站示例”,
“开放联系人”,
“打开电话拨号器示例”,
“搜索谷歌示例”,
“启动语音命令”
};
最终字符串searchTerms=“超人”;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setListAdapter(新阵列适配器)(此,
android.R.layout.simple_list_item_1,ACTIVITY_CHOICES));
getListView().setChoiceMode(ListView.CHOICE\u MODE\u SINGLE);
getListView().setTextFilterEnabled(true);
getListView().setOnItemClickListener(新的OnItemClickListener())
{
@凌驾
公共链接(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
开关(arg2){
案例0://打开web浏览器并导航到给定网站
startActivity(新意图(意图、行动和视图),
解析http://www.android.com/")));
打破
案例1://打开联系人应用程序以浏览联系人
startActivity(新意图(意图、行动和视图),
解析content://contacts/people/")));
打破
案例2://打开电话拨号器并填写给定号码
startActivity(新意图(意图、行动和视图),
parse(“电话:12125551212”);
打破
案例3://在谷歌上搜索字符串
意图=新意图(Intent.ACTION\u WEB\u SEARCH);
intent.putExtra(SearchManager.QUERY,searchTerms);
星触觉(意向);
打破
案例4://启动语音命令
星触觉(新)
意图(意图、行动、声音、命令);
打破
默认:中断;
}
}
});
}
}
中的详细信息首先无需使用ProgressDialog
启动任何活动它不会花费太多时间,ProgressDialog
用于长时间运行的操作,如服务器调用、上载/下载图像等
简单启动活动
Intent intent = new Intent(YourCurrentActivity.this, LoginActivity.class);
startActivity(intent);
仅此而已
现在您希望将数据传递给活动,而不是
Intent intent = new Intent(YourCurrentActivity.this, LoginActivity.class);
intent.putExtra("INTENT_PARAM", YourValue);
startActivity(intent);
onActivityResult()当您希望从正在进行的活动中获取一些数据时,将使用此方法
请看这篇文章-
为什么requestCode==requestCode我找不到函数setRequestCode
像setResultCode
onActivityResult()方法仅在startActivityForResult()的情况下调用,并且您正在调用startActivity,调用方式类似于startActivityForResult(intent,100)代码>这里100是请求代码,结果代码是
Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();
这里Activity.RESULT\u cancelled是您的结果代码
建议是呼叫活动,如
Intent intent = new Intent(YourCurrentActivity.this, LoginActivity.class);
startActivity(intent);
我应该使用片段而不是活动来共享导航栏吗
是的,您可以将此布局放在xml中
<RelativeLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
在switch中调用此方法
switch (id){
case R.id.item1:
addYourFragment();
break;
case R.id.item2:
addYourFragmentTwo()
break;
case R.id.item3:
addYourFragmentThree()
break;
}
我想问一下为什么在从登录活动中
必须以不同的方式启动主要活动
@Hoángėng,请接受我的回答。请或向上投票以获取响应,我使用了progressDialog,因为它将连接到服务器以logini设置登录
作为启动活动如何startActivityforResult
用于itIntent i=新意图(此为SecondActivity.class);startActivityForResult(i,1);像这样的
public void addYourFragment(){
YourFragment myFragment = new YourFragment();
FragmentManager fragmentManager = this.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, myFragment, tagToUniqlyIdentifiedFramgent);
fragmentTransaction.addToBackStack(tagToUniqlyIdentifiedFramgent);
fragmentTransaction.commit();
}
switch (id){
case R.id.item1:
addYourFragment();
break;
case R.id.item2:
addYourFragmentTwo()
break;
case R.id.item3:
addYourFragmentThree()
break;
}