2017-01-10 2 views
0

Я работаю над настройками экранов для андроида.Кнопка назад на панели инструментов Android не распознается

Экран настроек содержит 2 «вспомогательные экраны», обе имеют панель инструментов и имеют кнопку «Назад».

Задняя кнопка на экране 1, не делает ничего Кнопка возврата на экран 1 отлично работает и возвращает меня к главному экрану настроек («жестких» назад кнопка работает для обоих экранов)

Экран 1 (Настройки экрана):

Screen 1 (Preferences Screen)

экран 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> 

Java для экрана 1 :

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 (Карманные Перекрестные Параметры экрана):

Screen 2 (Pocket Cross Parameters Screen)

XML для экрана 2:

<?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> 

Java для экрана 2: -

 @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(); 
    } 

(lo AdParams является функцией, чтобы получить различные параметры из файла XML)

Я попытался добавить следующее к моему коду, но все же кнопку назад ничего не делает: -

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

    return super.onOptionsItemSelected(item); 
} 

То, что я изо всех сил, чтобы понять, почему кнопка «Назад» на каждом отдельном экране в моем приложении прекрасно работает, кроме этого.

Я предполагаю, что это будет что-то очевидное, но я понятия не имею, что.

+0

Вы пытались удалить андроид: clickable = "false" из RelativeLayout?(И вы можете удалить android: shrinkColumns and android: stretchColumns тоже из-за свойств TableLayout) – MatPag

+0

@MatPag 'android: clickable = "false"' только на экране 2. Экран 2 работает правильно. это экран 1, который не работает. – Nik

ответ

0

В вашем Manifest.xml добавить этот line, android:parentActivityName=".(Name of the activity you want to return)"

Так как этот

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

Это может быть хорошим комментарием, но это не отвечает на вопрос. Здесь возникает вопрос, почему кнопка возврата не работает, а не как вернуться к другому действию. – Mesabloo

+0

Спасибо. Я чувствую себя таким идиотом. Я никогда не думал проверять манифест !!! разница между двумя экранами - экран 2, в котором установлен родительский набор, а экран 1 - нет! – Nik

+0

Я рад, что смог помочь :) –

1

Вы можете проверить следующее

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); 
    } 
+0

Это будет работать только в случае использования «com.android.support.appcompat-v7» – Mesabloo

+0

Этот ответ может быть хорошим, но есть одна вещь проще: используйте 'getSupportActionBar(). SetNavigationOnClickListener (View.OnClickListener listener);' – Mesabloo

1

Этот вопрос, как представляется, с файлом XML. Вы указали свой родительский макет как clickable false и, следовательно, не получили ваши клики. Попробуйте удалить его.

Смежные вопросы