Нужна помощь в получении кнопок для работы - PullRequest
1 голос
/ 06 апреля 2010

Я пытаюсь заставить свою первую кнопку обновить отображаемый номер в моем представлении при нажатии. В этом представлении будет отображаться несколько кнопок и «выходов». Прочитав примеры и Q здесь, я наконец собрал что-то, что работает, но моя первая кнопка все еще не работает;

   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ship_layout);
        mSwitcher = (TextSwitcher) findViewById(R.id.eng_val);
        }

    private TextSwitcher mSwitcher;

        // Will be connected with the buttons via XML
        void onClick(View v){

            switch (v.getId()) {
            case R.id.engplus:
                engcounter++;
                updateCounter();
                break;
            case R.id.engneg:
                engcounter--;
                updateCounter();
                break;
            }
        }
    private void updateCounter() {
        mSwitcher.setText(String.valueOf(engcounter));
    }

.xml для этой кнопки:

     <TextSwitcher
    android:id="@+id/eng_val"
    android:visibility="visible"
    android:paddingTop="9px"
    android:paddingLeft="50px"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/build"
    android:layout_toRightOf="@+id/engeq"
    android:textColor="#DD00ff00"
    android:textSize="24sp"/>       

Это внутри Относительного макета, который выглядит иначе ОК. Когда я установил представление для TextView с числом, заданным в виде строки, число отображалось, но я не мог понять, как обновить текст с помощью числового поля. Это может быть моей настоящей проблемой.

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

Опять же, это просто попытка заставить переменные реагировать на кнопки и обновлять представление.

Итак, несколько вопросов для любого, кто может помочь;

1) Есть ли более простой способ сделать это (т.е. отправить числовое значение в View)? 2) Почему мой TextSwitcher не отображает число? 3) Должен ли я использовать TextSwitcher здесь? 4) На какие примеры вы можете мне указать?

ОБНОВЛЕНИЕ !!!: теперь работают кнопки с обратной связью. Вот мое исправление, основанное на отзывах, исследованиях и удаче;

открытый класс Myview расширяет Myapp, реализует ViewSwitcher.ViewFactory, View.OnClickListener {

public int engcounter = 1;
private TextSwitcher mSwitcher;

@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_layout);
        mSwitcher = (TextSwitcher) findViewById(R.id.eng_val);
        mSwitcher.setFactory(this);


    Button engp = (Button) findViewById(R.id.engplus);
    engp.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view){
        engcounter++;
        updateCounter();
        }
    });

    Button engn = (Button) findViewById(R.id.engneg);
    engn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view){
        engcounter--;
        updateCounter();       
        }   
    });

   }
    private void updateCounter() {
        mSwitcher.setText(String.valueOf(engcounter));
    }
    public View makeView() {
        TextView t = new TextView(this);
        t.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
        t.setTextSize(36);
        return t;
    }
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

}

В настоящее время это кажется ненужным (например, гравитация в makeView), но это работает! И должен работать на 10-20 кнопок, с которыми я хочу делать разные вещи.

Ключ был в том, чтобы слушатели были правы, и вся установка для TextSwitcher была немного неловкой ... все еще учусь.

Любые другие заключительные комментарии приветствуются!

ОБНОВЛЕНИЕ ОБНОВЛЕНИЕ !! Я также нашел это;

http://developer.android.com/resources/articles/ui-1.6.html

Ответы [ 2 ]

2 голосов
/ 07 апреля 2010

Ваш TextSwitcher не отображает числа, потому что вам нужно установить OnClickListener ваших кнопок в вашем методе onCreate (). В настоящее время ваш метод onClick () никогда не вызывается.

Добавьте это в свой onCreate:

Button plus = (Button) findViewById(R.id.engplus);
plus.setOnClickListener(this);
Button neg = (Button) findViewById(R.id.engneg);
neg.setOnClickListener(this);

И убедитесь, что ваш класс реализует View.OnClickListener

Поскольку это более простой способ показать числовое значение в TextView, то, как вы это делаете, прекрасно. Вы должны передать String в setText (), и способ преобразования числа в строку вполне подойдет.

0 голосов
/ 07 апреля 2010

Мне нужно было бы увидеть больше вашего кода, чтобы точно понять, что происходит, но вот демо API с сайта разработчика Android . Я предполагаю, что вам нужно реализовать ViewSwitcher ViewFactory и View OnClickListener. Я вижу, что у вас есть щелчок, но модификатор не совпадает, и я не вижу метод make view в вашем коде.

 
public class TextSwitcher1 extends Activity implements ViewSwitcher.ViewFactory,
        View.OnClickListener {

    private TextSwitcher mSwitcher;

    private int mCounter = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.text_switcher_1);

        mSwitcher = (TextSwitcher) findViewById(R.id.switcher);
        mSwitcher.setFactory(this);

        Animation in = AnimationUtils.loadAnimation(this,
                android.R.anim.fade_in);
        Animation out = AnimationUtils.loadAnimation(this,
                android.R.anim.fade_out);
        mSwitcher.setInAnimation(in);
        mSwitcher.setOutAnimation(out);

        Button nextButton = (Button) findViewById(R.id.next);
        nextButton.setOnClickListener(this);

        updateCounter();
    }

    public void onClick(View v) {
        mCounter++;
        updateCounter();
    }

    private void updateCounter() {
        mSwitcher.setText(String.valueOf(mCounter));
    }

    public View makeView() {
        TextView t = new TextView(this);
        t.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
        t.setTextSize(36);
        return t;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...