簡體   English   中英

無法識別Android工具欄的后退按鈕

[英]Android Toolbar back button not being recognised

我正在為Android應用程序設置屏幕。

設置屏幕包含2個“子屏幕”,均具有工具欄和后退按鈕。

屏幕1上的“后退”按鈕不起作用。屏幕1上的“后退”按鈕可以正常工作,並使我返回主設置屏幕(“硬”后退按鈕在兩個屏幕上均有效)

屏幕1(首選項屏幕):

屏幕1(首選項屏幕)

屏幕1 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:id="@+id/activity_preferences"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.clear.pocketcross.Preferences">

    <Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?android:attr/colorPrimary"
        android:popupTheme="@android:style/ThemeOverlay.Material.Light"
        android:theme="@android:style/ThemeOverlay.Material.Dark.ActionBar" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin">

        <Switch
            android:id="@+id/counterscroll"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:defaultValue="true"
            android:key="counter_scroll"
            android:shadowColor="@color/gradient_mid"
            android:shadowDx="5"
            android:shadowDy="5"
            android:text="@string/scrollCounters"
            android:thumb="@drawable/pocketcross_btn_radio_on_holo_light" />

        <Switch
            android:id="@+id/navswipe"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:defaultValue="true"
            android:key="nav_swipe"
            android:shadowColor="@color/gradient_mid"
            android:shadowDx="5"
            android:shadowDy="5"
            android:text="@string/swipeTitle"
            android:thumb="@drawable/pocketcross_btn_radio_on_holo_light" />
    </LinearLayout>

</RelativeLayout>

屏幕1的Java:

Switch nav;
Switch scroll;
SharedPreferences shared;
public static final String MyPREFERENCES = "PocketCross";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_preferences);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    //Toolbar will now take on default Action Bar characteristics
    setActionBar(toolbar);
    getActionBar().setDisplayHomeAsUpEnabled(true);

    this.setTitle("Preferences");

    nav = (Switch) findViewById(R.id.navswipe);
    scroll = (Switch) findViewById(R.id.counterscroll);

    if (shared == null) {
        shared = this.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
    }
    nav.setChecked(shared.getBoolean("nav_swipe", true));
    scroll.setChecked(shared.getBoolean("counter_scroll", true));

    nav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            SharedPreferences.Editor spEdit = shared.edit();
            spEdit.putBoolean("nav_swipe", isChecked);
            spEdit.apply();
        }
    });

    scroll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            SharedPreferences.Editor spEdit = shared.edit();
            spEdit.putBoolean("counter_scroll", isChecked);
            spEdit.apply();
        }
    });
}

屏幕2(口袋交叉參數屏幕):

屏幕2(口袋交叉參數屏幕)

屏幕2的XML:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parametersTable"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:shrinkColumns="*"
    android:stretchColumns="*"
    android:background="@color/background"
    android:clickable="false">

    <Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?android:attr/colorPrimary"
        android:theme="@android:style/ThemeOverlay.Material.Dark.ActionBar"
        android:popupTheme="@android:style/ThemeOverlay.Material.Light" />

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/parametersList"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="@dimen/activity_vertical_margin"
        android:layout_marginBottom="@dimen/activity_vertical_margin"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        android:layout_below="@+id/toolbar" />

</RelativeLayout>

屏幕2的Java:-

        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_paramaters);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        //Toolbar will now take on default Action Bar characteristics
        setActionBar(toolbar);
        getActionBar().setDisplayHomeAsUpEnabled(true);

        this.setTitle(R.string.parametersTitle);

        mntFile = MainMenu.mntFile;

        fileData = xmlTools.getXmlFile(mntFile);
        tags = fileData.xmlTags;
        for (int i = 0; i < tags.size(); i++) {
            tag = tags.get(i);
            if (tag.nodeTag.equalsIgnoreCase("PocketCrossSysParam")) {
                nodes = tag.nodeData;
                paramSetting = xmlTools.getNodeFromList(nodes, "ParamName");
                paramValue = xmlTools.getNodeFromList(nodes, "ParamValue");
                parameter = new PocketCrossParameter(paramSetting,paramValue);
                parameters.add(parameter);
            }
        }
        loadParams();
    }

(loadParams是從xml文件獲取各種參數的函數)

我嘗試將以下內容添加到我的代碼中,但是后退按鈕卻無能為力:-

@Override
public boolean onOptionsItemSelected(MenuItem item) { 
        switch (item.getItemId()) {
        case android.R.id.home: 
            onBackPressed();
            return true;
        }

    return super.onOptionsItemSelected(item);
}

我正在努力了解的是,為什么我的應用程序中每個屏幕上的“后退”按鈕都可以正常運行,但除了這個按鈕之外。

我猜這將是顯而易見的,但我不知道該怎么辦。

您可以檢查以下內容

1)您的活動擴展了AppCompatActivity
2)

Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle("Title");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

3)覆蓋以下方法

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId()== android.R.id.home) {
            finish();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

在您的manifest.xml中添加以下行android:parentActivityName=".(Name of the activity you want to return)"

像這樣

<activity
            android:name=".(CurrentActivity)"
            android:parentActivityName=".(Activity to be returned)"/>

問題似乎出在您的xml文件中。 您已將您的父級布局指定為clickable false,因此沒有收到您的點擊呼叫。 嘗試將其刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM