Android: кнопки не отображают выводимый текст в эмуляторе при нажатии - PullRequest
0 голосов
/ 21 февраля 2012

ОБНОВЛЕНИЕ: Я изменил код активности на мой лучший рабочий набор.Моя текущая проблема заключается в том, что при нажатии кнопки приложение закрывается в эмуляторе.Мой Logcat говорит, что проблема в строке 38, операторе switch, где вызывается updateDate (), и в строке 64, которая устанавливает текст для текущей даты.

Я создал приложение с двумя кнопками, отображающимиЕсли вы открыли в эмуляторе Android и нажали кнопку «Текущий день», то под кнопками нет текста, как это должно быть.Я использую TextView под кнопками для отображения вывода.Вот код из моего main.xml и активности соответственно.

main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="top"
    android:orientation="vertical" >

    <Button
        android:id="@+id/dayOf"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/buttonDay"
        />

    <Button
        android:id="@+id/clock"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/buttonTime" 
        />

    <TextView
        android:id="@+id/info"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/output"
        android:textSize="72dip"
        />

</LinearLayout>

Активность

package omaxwell.CS211D.TimeAndDate;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import java.util.Calendar;
import android.widget.TextView;
/*
 * This is the activity for my Android App that gives you the date and time 
 */
//*******************TimeAndDateActivity*******************
public class TimeAndDateActivity extends Activity implements View.OnClickListener
{
    Button dayOf;
    Button clock;
    @Override
    //*******************onCreate*******************
    public void onCreate(Bundle b)
    {
        super.onCreate(b);
        setContentView(R.layout.main);

        clock = (Button)this.findViewById(R.id.clock);   //Time Button
        clock.setOnClickListener(this);

        dayOf = (Button)this.findViewById(R.id.dayOf);   //Date Button
        dayOf.setOnClickListener(this);
    }
        //*******************onClick*******************
        public void onClick(View v) //Called when one of the buttons above is clicked
        {
            switch(v.getId())
            {
                case R.id.clock:
                    updateTime();
                    break;
                case R.id.dayOf:
                    updateDate();
                    break;
            }

        }
            //*******************updateTime*******************
            private void updateTime()
            {
                Calendar d = Calendar.getInstance();
                d.getTime();

                TextView tv = (TextView) findViewById(R.string.output);
                tv.setText(d.getTime().toString());
            }
            //*******************updateDay*******************
            private void updateDate()
            {
                Calendar c = Calendar.getInstance();

                int day = c.get(Calendar.DAY_OF_MONTH);
                int month = c.get(Calendar.MONTH);
                int year = c.get(Calendar.YEAR);

                String date = String.valueOf(day) + "-" + String.valueOf(month) + "-" +String.valueOf(year);

                TextView tv = (TextView) findViewById(R.string.output);
                tv.setText(date);
            }


}

Заранее спасибо:)

Ответы [ 4 ]

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

Это должно работать:

package omaxwell.CS211D.TimeAndDate;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import java.util.Calendar;
import android.widget.TextView;
/*
 * This is the activity for my Android App that gives you the date and time 
 */
//*******************TimeAndDateActivity*******************
public class TimeAndDateActivity extends Activity implements View.OnClickListener
{
    Button dayOf;
    Button clock;
    TextView info;

    @Override
    //*******************onCreate*******************
    public void onCreate(Bundle b)
    {
        super.onCreate(b);

        this.setContentView(R.layout.main); // set content view firstly


        clock = (Button)this.findViewById(R.id.clock);   //Time Button
        dayOf = (Button)this.findViewById(R.id.dayOf);   //Date Button
        // set OnClickListener, you can also use the "android:click" attribute in the XML
        clock.setOnClickListener(this);
        dayOf.setOnClickListener(this);

        info = (TextView)this.findViewById(R.id.info);   //TextView
    }

        //*******************onClick*******************
        public void onClick(View v) //Called when one of the buttons above is clicked
        {
            switch(v.getId())
            {
                case R.id.clock:
                    updateTime();
                    break;  // don't forget break ! Otherwise, updateDate() will be execute

                case R.id.dayOf:
                    updateDate();
                    break;
            }

        }

            //*******************updateTime*******************
            private void updateTime()
            {
                Calendar d = Calendar.getInstance();
                d.getTime();

                // just update info
                info.setText(d.getTime().toString());

                // Following is wrong!
                //TextView tv = new TextView(this);
                //tv.setText(d.getTime().toString());
                //  setContentView(R.id.info);
            }

            //*******************updateDay*******************
            private void updateDate()
            {
                Calendar c = Calendar.getInstance();

                int day = c.get(Calendar.DAY_OF_MONTH);
                int month = c.get(Calendar.MONTH);
                int year = c.get(Calendar.YEAR);

                String date = String.valueOf(day) + "-" + String.valueOf(month) + "-" +String.valueOf(year);

                // just update info
                info.setText(d.getTime().toString());

                // Following is wrong!
                //TextView tv = new TextView(this);
                //tv.setText(date);
                // setContentView(R.id.info);
            }
}
0 голосов
/ 21 февраля 2012

Похоже, вы создаете новый Textview в updateDate (), но вы ничего не делаете с ним. Вместо этого просто обновите существующее Textview:

TextView txt = (TextView) findViewById(R.id.info);
txt.setText(date);
0 голосов
/ 21 февраля 2012

Я думаю, вы не установили OnClickListener на кнопку

public void onCreate(Bundle b)
        {
           super.onCreate(b);
           setContentView(R.layout.main);
           clock = (Button)this.findViewById(R.id.clock);   //Time Button
           dayOf = (Button)this.findViewById(R.id.dayOf);   //Date Button
           clock.setOnClickListener(this);
           dayOf.setOnClickListener(this);

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

После создания textView вы добавляете его тоже .. так что

TextView tv = new TextView(this);
                tv.setText(date);

получить контент Посмотреть и сказать,

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