Подтвердить что ты не робот

Android: как изменить раскладку на кнопку?

Мне нужен следующий код для выбора макета при нажатии кнопки.

View.OnClickListener handler = new View.OnClickListener(){
    public void onClick(View v) {

        switch (v.getId()) {

            case R.id.DownloadView: 
                // doStuff
                setContentView(R.layout.main);
                break;
            case R.id.AppView: 
                // doStuff
                setContentView(R.layout.app);
                break;
        }
    }
};

findViewById(R.id.DownloadView).setOnClickListener(handler);
findViewById(R.id.AppView).setOnClickListener(handler);

Когда я нажимаю кнопку "AppView", макет меняется, но когда я нажимаю кнопку "DownloadView", ничего не происходит.

Эта ссылка говорит, что я должен начать новую деятельность.

Но я не знаю, как использовать код для намерения начать новую активность, добавится ли новый файл?

EDIT: У меня есть код для новой активности:

package com.example.engagiasync;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class AppView extends Activity implements OnClickListener{


    @Override
    public void onCreate(Bundle savedInstanceState){

        setContentView(R.layout.app);

        TextView tv = (TextView) this.findViewById(R.id.thetext);
        tv.setText("App View yo!?\n");
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }
}

, но он не работает, его сила закрывается, logcat говорит: enter image description here

4b9b3361

Ответ 1

  Button btnDownload = (Button) findViewById(R.id.DownloadView);
  Button btnApp = (Button) findViewById(R.id.AppView);

  btnDownload.setOnClickListener(handler);
  btnApp.setOnClickListener(handler);

  View.OnClickListener handler = new View.OnClickListener(){

  public void onClick(View v) {

    if(v==btnDownload){ 
            // doStuff
            Intent intentMain = new Intent(CurrentActivity.this , 
                                           SecondActivity.class);
            CurrentActivity.this.startActivity(intentMain);
            Log.i("Content "," Main layout ");
    }

    if(v==btnApp){ 
            // doStuff
            Intent intentApp = new Intent(CurrentActivity.this, 
                                          ThirdActivity.class);

            CurrentActivity.this.startActivity(intentApp);

            Log.i("Content "," App layout ");

    }
   }
  };

Примечание. Затем вы должны объявить все свои действия в файле манифеста .xml следующим образом:

<activity android:name=".SecondActivity" ></activity>
<activity android:name=".ThirdActivity" ></activity>

EDIT: обновите эту часть кода:):

@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);// Add THIS LINE

    setContentView(R.layout.app);

    TextView tv = (TextView) this.findViewById(R.id.thetext);
    tv.setText("App View yo!?\n");
}

NB: проверьте (ссылка неработающая ссылка) Учебное пособие о том, как переключаться между действиями.

Ответ 2

Я бы добавил android:onClick к макету, а затем изменил макет в своей деятельности.

Итак, в макете

<ImageView
(Other things like source etc.)
android:onClick="changelayout"
/>

Затем в операции добавьте следующее:

public void changelayout(View view){
    setContentView(R.layout.second_layout);
}

Ответ 3

Я думаю, что то, что вы пытаетесь сделать, должно быть сделано с несколькими действиями. Если вы изучаете Android, понимание действий - это то, что вам придется решать. Попытка написать целое приложение только с одним Управлением будет намного сложнее. Прочтите эту статью, чтобы начать работу, тогда вам нужно больше что-то вроде этого:

View.OnClickListener handler = new View.OnClickListener(){
    public void onClick(View v) {

        switch (v.getId()) {

            case R.id.DownloadView: 
                // doStuff
                startActivity(new Intent(ThisActivity.this, DownloadActivity.class));
                break;
            case R.id.AppView: 
                // doStuff
                startActivity(new Intent(ThisActivity.this, AppActivity.class));
                break;
        }
    }
};

findViewById(R.id.DownloadView).setOnClickListener(handler);
findViewById(R.id.AppView).setOnClickListener(handler);

Ответ 4

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

Ответ 5

Лог-код показывает ошибку, вы должны называть super.onCreate(savedInstanceState):

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    //... your code
}

Ответ 6

Сначала я бы предложил поставить Log в каждом случае вашего коммутатора, чтобы убедиться, что ваш код вызывается.

Тогда я бы проверял, что макеты на самом деле разные.

Ответ 7

Я знаю, что я прихожу к этому поздно, но что, черт возьми.

У меня есть почти тот же самый код, что и Kris, используя только одно действие, но с двумя разными макетами/представлениями, и я хочу переключаться между макетами по своему усмотрению.

В качестве теста я добавил два параметра меню, каждый из которых переключает вид:

public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case R.id.item1:
                setContentView(R.layout.main);
                return true;
            case R.id.item2:
                setContentView(R.layout.alternate);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

Примечание. У меня есть класс Activity. Это прекрасно работает. Поэтому я понятия не имею, почему люди предлагают использовать разные действия/намерения. Может быть, кто-то может объяснить, почему мой код работает, а Крис этого не сделал.

Ответ 8

Это очень просто, просто сделайте следующее:

t4.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {

            launchQuiz2();          // TODO Auto-generated method stub

        }

        private void launchQuiz2() {
            Intent i = new Intent(MainActivity.this, Quiz2.class);
            startActivity(i);
            // TODO Auto-generated method stub

        }

    });