Учитывая свойство класса, вы можете указать другой уровень доступа, префикс объявления свойства с помощью модификатора доступа, а затем get
или set
между скобками. Например, свойство класса с публичным получателем и частным сеттером будет объявлено как:
private(set) public var readonlyProperty: Int
Рекомендуемое чтение: Getters and Setters
Martin's соображения относительно уровня доступности все еще действительны, т. е. нет модификатора protected
, internal
ограничивает доступ только к модулю, private
только к текущему файлу и public
без ограничений.
К языку добавлены 2 новых модификатора доступа, fileprivate
и open
, а private
и public
были слегка изменены:
open
применяется только к классам и членам класса: он используется, чтобы позволить классу быть подклассом или член переопределяться вне модуля, где они определены. public
вместо этого делает класс или член общедоступным, но не наследуемым или переопределяемым private
теперь делает элемент видимым и доступным только из объявляющего объявления, тогда как fileprivate
для всего файла, где он содержится Подробнее здесь .
Я думаю, вы хотите переопределить операцию нажатия кнопки «домой». Вы можете переопределить эту функциональность, как это в своей деятельности.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
Существует несколько способов настройки кнопки возврата в строке:
1) метод .setDisplayHomeAsUpEnabled(true);
сделает это, а затем вы можете просто отменить android.R.id.home
2 ) добавление <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="my.package.parrent" />
в Android Manifest, но в этом случае вы не можете переопределить android.R.id.home
в OnOptionsMenuSelected.
.. для тех, кто задается вопросом, почему он не работает для них ...
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
}
return true;
}
Если вы хотите вернуться к предыдущему экземпляру Activity, нажав кнопку «Главная страница ActionBar», не обновляя его, вы можете переопределить метод getParentActivityIntent, чтобы использовать тот из заднего стека:
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public Intent getParentActivityIntent() {
return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}
EDIT: Также вы можете добиться того же результата, установив для параметра launchMode вашей родительской активности значение singleTop. Поэтому установите android:launchMode="singleTop"
на родительскую активность в манифесте. Или вы можете использовать флаг FLAG_ACTIVITY_CLEAR_TOP с намерением UP. ссылка: Предоставление навигации вверх
@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) {
onBackPressed();
return true;
}
//noinspection SimplifiableIfStatement
if (id == R.id.signIn) {
return true;
}
return super.onOptionsItemSelected(item);
}
///////////////////
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
Если вы хотите, чтобы кнопка возврата ActionBar вела себя так же, как кнопка аппаратного возврата:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return false;
}
setHasOptionsMenu(true)
в методе onCreate фрагмента
– wilddev
16 June 2017 в 06:12
Две вещи, чтобы иметь в виду, что пользователь может нажать кнопку «Назад» или нажать кнопку входа в панель действий. Итак, если вы хотите перенаправить его в тот же пункт назначения, вы можете это сделать.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return false;
}
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
startActivity(intent);
finish();
}
Это приведет к намерению пользователя нажать любую клавишу или кнопку панели действий.
Извините, мой последний ответ, но для всех, кто пришел на эту страницу с тем же вопросом, я попробовал следующее:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
...
if (item.getItemId() == android.R.id.home) {
....
}
....
}
, но это не удалось поймать кнопку «Назад» ,
В конце концов я нашел метод, который работал для меня на https://stackoverflow.com/a/37185334/3697478 , который должен переопределить «onSupportNavigateUp ()», поскольку я используя панель действий из библиотеки поддержки AppCompatActivity. (Существует эквивалент «onNavigateUp ()» для новой библиотеки инструментов / панели инструментов.)
@Override
public boolean onSupportNavigateUp(){
finish();
return true;
}
, и я удалил раздел «android: parentActivityName =». MainActivity из файла манифеста.
Я достиг этого, используя всего лишь два шага:
Шаг 1: перейдите в AndroidManifest.xml и добавьте параметр в тег - android: parentActivityName = ". home.HomeActivity"
example:
<activity
android:name=".home.ActivityDetail"
android:parentActivityName=".home.HomeActivity"
android:screenOrientation="portrait" />
Шаг 2: в ActivityDetail добавьте действие для предыдущей страницы / активности
:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
return true;
наreturn super.onOptionsItemSelected(item)
. Затем вы можете что-то сделать, когда пользователь нажимает кнопку назад на панели действий, но сохраняет ту же функциональность кнопки. – kumaheiyama 16 February 2015 в 20:55