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

我是android开发者的新手。
我先学习一些教程,然后制作一个简单的应用程序。
我对开始其他
活动的方式感到困惑

我有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;
    }