setContentView и слушатели - PullRequest
3 голосов
/ 10 февраля 2012

В какой-то момент я изменяю свой ContentView of Activity. (в View2). После изменения обратно на View1, слушатели больше не работают. Я уже пытался поместить Listener в метод onResume ().

Распространено ли в любом случае использование setContentView () для отображения, например, экран прогресса / пожалуйста, подождите, ... (пока выполняется асинхронная задача). Или вы должны иметь только ОДИН mainView для каждого вида деятельности? (и динамически заменять контент).

// РЕДАКТИРОВАТЬ: Чтобы быть более конкретным: Я ищу что-то вроде

LinearLayout item = (LinearLayout) findViewById(R.id.mainView);
View child = getLayoutInflater().inflate(R.layout.progress, null);
item.addView(child);

но вместо добавления «progress.xml» следует удалить текущий макет и ТОЛЬКО показать «progress.xml». Нужен ли «контейнер» и показать / скрыть mainView / progress? Но мне это не кажется правильным ...

См. Также код ниже (раздетый)

public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.view1);

       button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                doSomething();
            }
        });
}

setContentView(R.layout.view2);
[...]
setContentView(R.layout.view1);

//Listener not more working

Ответы [ 3 ]

2 голосов
/ 10 февраля 2012

Спасибо всем за ваш ответ. Вы заставили меня понять, что onClickListeners теряются, когда я удаляю или заменяю (используя setContentView ()) основное представление. Я закончил таким образом сейчас:

OnCreate:

setContentView(R.layout.parse);
LinearLayout container = (LinearLayout) findViewById(R.id.container);
container.addView(getLayoutInflater().inflate(R.layout.dialog, null));
container.addView(getLayoutInflater().inflate(R.layout.progress, null));

onStartDoingSomething:

findViewById(R.id.dialog).setVisibility(View.INVISIBLE);
findViewById(R.id.progress).setVisibility(View.VISIBLE);

onEndDoingSomehting:

findViewById(R.id.dialog).setVisibility(View.VISIBLE);
findViewById(R.id.progress).setVisibility(View.INVISIBLE);

Я мог бы изменить View.INVISIBLE на View.GONE, как сказал nmr, но, поскольку я никогда не использовал View.GONE, я должен сначала проверить доку Android;)

1 голос
/ 10 февраля 2012

Предполагая, что вы используете 'findViewById' для инициализации 'кнопки', вам придется делать это каждый раз, когда вы делаете setContentView (R.layout.view1);

0 голосов
/ 10 февраля 2012

Вы можете иметь только один пользовательский интерфейс для каждого действия, вам нужно создать другое действие и в его методе onCreate установить представление содержимого

Шаги:

  1. Создать действие
  2. Используйте следующий код для установки представления содержимого:

    public void onCreate (Bundle saveInstanceState) {super.onCreate (saveInstanceState);setContentView (R.layout.view2);

    }

  3. Определите активность в манифесте приложений следующим образом:

  4. Создать намерение в первом занятии:

    public void onCreate (Bundle saveInstanceState) {super.onCreate (saveInstanceState);setContentView (R.layout.view1);

    Кнопка button = (кнопка) findViewById (R.id.button);

    button.setOnClickListener (new OnClickListener () {@Override public void onClick(Просмотр v) {intent ();}});}

    void intent () {

    Intent intent = new Intent (); intent.setClass (Activity1.this, Activity2.class);startActivity (намерение);

    }

И вот, пожалуйста, c:

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