工具栏中的向上按钮不起作用

时间:2016-04-29 09:29:48

标签: android android-studio android-toolbar

我在我的应用中设置了工具栏(第一次),但我无法设置主页(/向上)按钮在点击时执行任何操作。 我有3个激活(MainActivity,Second,Third)并且我已经在所有3中定义了工具栏但是当我在每个活动中单击Home按钮时没有任何反应我希望按钮执行他的操作(在我的理解中)默认回到主页活动的行动是" MainActivity"。

以下是一些相关代码: 工具栏布局(名称为:app_bar.xml):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar_id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/toolBar_background"
        android:elevation="5dp"
        android:title="@string/app_name" />
</RelativeLayout> 

我的3个活动布局xmls: activity_main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context="com.example.noamm_000.finaltoolbarproject.MainActivity">

    <include layout="@layout/app_bar"/>
//More layout code...

Activity_Second.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    tools:context="com.example.noamm_000.finaltoolbarproject.Second">

    <include layout="@layout/app_bar"/>
//More layout code...

Activity_Third.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.noamm_000.finaltoolbarproject.Third">

    <include layout="@layout/app_bar"/>
//More layout code

实际上,所有3个活动都只包含名称&#34; app_bar.xml&#34;的工具栏布局。

以下是我配置app_parent的Mainfest文件的一部分:

  <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Second"
            android:parentActivityName=".MainActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity"/>
            <intent-filter>
                <action android:name="com.example.noamm_000.finaltoolbarproject.Second" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Third"
            android:parentActivityName=".MainActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity"/>
            <intent-filter>
                <action android:name="com.example.noamm_000.finaltoolbarproject.Third" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

以及我的3个活动的每个java代码的当前部分: MainActivity:

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toolbar = (Toolbar) findViewById(R.id.toolbar_id);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);

        mainBtn = (Button) findViewById(R.id.btn_main);
        openSecondActivity();
    }
    public void openSecondActivity(){
        mainBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("com.example.noamm_000.finaltoolbarproject.Second");
                startActivity(intent);
            }
        });

SecondActivity:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        btnSecond = (Button) findViewById(R.id.btn_second);

        toolbar = (Toolbar) findViewById(R.id.toolbar_id);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);

        openThirdActivity();
    }

    public void openThirdActivity(){
        btnSecond.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("com.example.noamm_000.finaltoolbarproject.Third");
                startActivity(intent);
            }
        });
    }

和ThirdActivity:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third);

        toolbar = (Toolbar) findViewById(R.id.toolbar_id);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);
    }

    public boolean onCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.toolbar_menu,menu);
        return super.onCreateOptionsMenu(menu);
    }

你可以看到所有3个活动&#34; onCreate&#34;功能几乎相同.. 当我启动我的应用程序时,我可以看到所有3个活动中的工具栏,我可以看到所有后面的箭头,但点击它什么都不做。 我知道我可以设置toolbar.setNavigationOnClickListener但我只是想让它成为默认动作,这是去家庭活动.... 非常感谢你, 诺姆

4 个答案:

答案 0 :(得分:0)

试试这个:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
      switch (item.getItemId()) {
            case android.R.id.home:
               //finish(); or Do wahtever you wnat to do
                return true;
    }
    return true;
}

答案 1 :(得分:0)

试试这个......

  @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == android.R.id.home) {
            Intent i = new Intent(CurrentActivity.this, HomeActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(i);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

答案 2 :(得分:0)

如果您有父活动,请按照此代码

 @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case android.R.id.home:
            if(NavUtils.getParentActivityIntent(this)== null) {
                onBackPressed();
            }else{
                NavUtils.navigateUpFromSameTask(this);
            }
            break;
    }
    return super.onOptionsItemSelected(item);
}

答案 3 :(得分:0)

在您的活动中试试这个

@Override
public boolean onOptionsItemIdSelected(int id) {   
    switch (id) {
            case R.id.home:
                //do stuff 
                break;
    }
    return true;
}

在您的情况下,我建议您创建一个继承所有活动的AbstractActivity。因此,您可以考虑许多行为,包括管理工具栏按钮