Найти и вернуть идентификатор текущего представления - PullRequest
0 голосов
/ 28 июня 2011

Я пытаюсь настроить кнопку "близко к началу" в игре.Игра переводит пользователя из вида в лабиринт.Пользователь может быть в любом представлении, но я хочу, чтобы он вернулся к стартовому экрану.Есть ли способ найти и вернуть идентификатор текущего представления для моего findViewByID?Я нашел я пробовал следующий код в различных формах:

OnClickListener closetomain = new OnClickListener() {
@Override
public void onClick(View v) {

     int currentid = v.findFocus().getId();

     RelativeLayout hideme = (RelativeLayout)findViewById(currentid);
     hideme.setVisibility(View.GONE);
     setContentView(R.layout.main);
//         RelativeLayout showme = (RelativeLayout)findViewById(R.id.startLayout);
//         showme.setVisibility(View.VISIBLE);
    }
};

Ответы [ 2 ]

1 голос
/ 01 июля 2011

Хорошо, получается, что я должен был присвоить каждой кнопке закрытия один и тот же идентификатор и использовать предложение theisenp для простейшего кода (хорошо, что я мог понять).Также оказалось, что я должен был начать с того, что поместил каждый уровень / макет в свою собственную деятельность.Вы живете, и вы узнаете, я думаю.Ниже мой XML и Java.Возможно, это не элегантное решение, но я не уверен, что мне все равно, пока оно работает.

        <ImageButton android:id="@+id/closeButton"
    android:layout_height="wrap_content" 
    android:background="@drawable/close" 
    android:layout_width="wrap_content" 
    android:layout_alignParentBottom="true"
    android:layout_marginLeft="10dp"
    android:layout_marginBottom="10dp"
    android:onClick="closetomain">
    </ImageButton>

А вот мой Java:

public void closetomain(View view) {
switch(view.getId()) {
    case R.id.closeButton:
        setContentView(R.layout.main);
        break;
    }
}
0 голосов
/ 28 июня 2011

Зачем вам нужно получить идентификатор текущего представления? Это просто так, что вы можете установить его видимость GONE? Если это так, то, вероятно, существуют лучшие способы реализации той же функциональности.

Вместо простого изменения макета с помощью setContentView (), вероятно, было бы лучше, если бы стартовый экран представлял собой отдельное действие. Когда вы находитесь в любом из «видов лабиринта», вы можете просто использовать намерение, чтобы начать свою домашнюю деятельность, например,

Intent startScreenIntent = new Intent(this, StartScreen.Class);
startActivity(startScreenIntent);

Тогда вам не придется беспокоиться о поиске идентификаторов или изменении видимости, плюс код будет чище, потому что он разделяет код для ваших уровней лабиринта и вашего меню Пуск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...