Кнопки Android в Eclipse Helios (ADT 10.0.1) не связаны должным образом - PullRequest
0 голосов
/ 28 мая 2011

Это мой первый пост на сайте, и я постараюсь быть настолько конкретным, насколько запрошены советы.Я использую Eclipse Helios с ADT 10.0.1

. Я работаю над приложением для Android, которое должно быть общим руководством по Starcraft II.Довольно простые вещи, это для класса программирования.Предполагается, что у него есть заставка с кнопкой «Продолжить», которая связана с главным меню.

Главное меню состоит из нескольких кнопок, которые должны ссылаться на разные созданные макеты.Когда я запускаю свое приложение в эмуляторе (я пробовал уровень 12, 9 и т. Д.), Первая кнопка ссылается на меню, но кнопки в меню не могут связаться.У меня нет синтаксических ошибок в моем коде, однако он показывает полное желтое подчеркивание для всех кнопок, кроме первой.Я немного поэкспериментировал с базовым синтаксисом, чтобы он не отображал никаких красных или желтых подчеркиваний, и это никуда меня не привело.Когда я удалил последнюю кнопку из кода, которая является кнопкой «Назад» в макетах, ссылаясь назад на переднее меню, кнопки в меню вместо этого начали ссылаться на ссылку последней кнопки, под которой я подразумеваю последнюю в коде,Поэтому я подумал, что это может быть пропустить всех других слушателей и просто использовать один для последней кнопки в коде, или что-то в этом роде.Имейте в виду, что я еще не очень хорош в программировании.

Вот основной вид кода.

package lol.lol;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class ofk extends Activity {
    /** Called when the activity is first created. */
    @Override
    protected void onCreate(Bundle button1) {
        super.onCreate(button1);

        setContentView(R.layout.intro);

        Button button = (Button) findViewById(R.id.continuebutton);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                setContentView(R.layout.frontmenu);

            }
        }); 




    final Button button2 = (Button) findViewById(R.id.aboutapp);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                setContentView(R.layout.aboutsc2g);
            }
        }); 




        final Button button3 = (Button) findViewById(R.id.aboutsc);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                setContentView(R.layout.aboutsc2);
                // Perform action on click
            }
        });

        final Button button4 = (Button) findViewById(R.id.micro);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                setContentView(R.layout.micro);
                // Perform action on click
            }
        });

        final Button button5 = (Button) findViewById(R.id.macro);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                setContentView(R.layout.macro);
                // Perform action on click
            }
        });

        final Button button6 = (Button) findViewById(R.id.mechanics);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                setContentView(R.layout.mechanics);
                // Perform action on click
            }
        });

        final Button button7 = (Button) findViewById(R.id.zergbasics);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                setContentView(R.layout.zergbasics);
                // Perform action on click
            }
        });

        final Button button8 = (Button) findViewById(R.id.terranbasics);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                setContentView(R.layout.terranbasics);
                // Perform action on click
            }
        });

        final Button button9 = (Button) findViewById(R.id.protossbasics);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                setContentView(R.layout.protossbasics);
                // Perform action on click
            }
        });

        final Button button10 = (Button) findViewById(R.id.backbutton);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                setContentView(R.layout.frontmenu);
                // Perform action on click
            }
        });

Так что мой вопрос в том, как получить кнопки на макетеfrontmenu, чтобы связать, где они должны?Есть ли какие-либо синтаксические ошибки или что-то, что мне нужно добавить в этот фрагмент кода, чтобы он функционировал должным образом?

Заранее спасибо!

1 Ответ

0 голосов
/ 28 мая 2011

Хорошо, позвольте мне сначала сказать: это не так, как это подразумевалось под Android SDK.у вас должна быть активность для каждого изменения экрана контента, которая реализуется путем переключения просмотра контента здесь.может быть, посмотрите здесь, если вы не сделали этого: http://developer.android.com/guide/topics/fundamentals.html

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

однако можно сделать это так, как вы пытались.вот короткий фрагмент:

public class Start extends Activity {
/** Called when the activity is first created. */
@Override
protected void onCreate(Bundle savedInstanceState) {

LayoutInflater mLayoutInflater = getLayoutInflater();
final LinearLayout mLinearLayoutIntro = (LinearLayout) mLayoutInflater.inflate(R.layout.intro, null);

setContentView(mLinearLayoutIntro);

final LinearLayout mLinearLayoutFrontMenu = (LinearLayout) mLayoutInflater.inflate(R.layout.frontmenu, null);

Button continueButton = (Button) findViewById(R.id.continuebutton);
continueButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
    setContentView(mLinearLayoutFrontMenu);

    }
});

final LinearLayout mLinearLayouAboutSc2g = (LinearLayout) mLayoutInflater.inflate(R.layout.aboutsc2g, null);

final Button aboutAppButton = (Button) mLinearLayoutFrontMenu.findViewById(R.id.aboutapp);
aboutAppButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {

    setContentView(mLinearLayouAboutSc2g);
    }
});

final Button backButton = (Button) mLinearLayoutFrontMenu.findViewById(R.id.backbutton);
backButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {

    setContentView(mLinearLayoutIntro);
    // Perform action on click
    }
});
super.onCreate(savedInstanceState);
}

}

Вы видите, в вашем коде есть небольшая разница.Первая ошибка в вашем коде заключалась в том, чтобы привязывать прослушиватели кликов только к первой кнопке (возможно, скопировать / вставить, а затем забыть).

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

и третье: хорошо ... действительно, делайте ваше приложение с одним действием на каждый экран контента :)

...