Изменить Android «Загрузка ..» текст

#android #android-layout

#Android #android-макет

Вопрос:

Так что, вероятно, это простая вещь, которую я пытаюсь сделать, но я пытаюсь отобразить экран загрузки Android по умолчанию и вместо текста сказать «Потребляет …» Я делаю это на основе руководства в кулинарной книге Android. Вот мой код и XML-файлы. Если вам нужны какие-либо другие фрагменты кода, просто дайте мне знать. Я, честно говоря, наверное, делаю что-то глупое, но мне просто нужно знать. В logcat ничего не происходит, поэтому я уверен, в чем проблема. Хотя, возможно, книга просто устарела. Я должен также отметить, что я использую Android 2.2 и тестирую на Samsung Galaxy 4G.

Так что, я думаю, требуется немного больше информации. Я пытаюсь следовать рецепту инициализации, требующему много времени, в кулинарной книге разработчика Android: http://bit.ly/sFoBn6 Мне просто нужна простая текстовая заставка. Даже нет индикатора выполнения. Сейчас мы говорим о простой глупости. Я все еще изучаю Android. Я просто хочу, чтобы он выполнял обычную «загрузку ..» но вместо этого пусть он скажет «Потребляет …»

HandleMessage.java

 package com.cookbook.handle_message;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

public class HandleMessage extends Activity implements Runnable {
    /** Called when the activity is first created. */
    TextView mTestLabel;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mTestLabel = (TextView) findViewById(R.id.test);

        Thread thread = new Thread(this);
        thread.start();
    }

    private Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            setContentView(R.layout.main);
        }
    };

    public void run() {
        initializeArrays();
        mHandler.sendEmptyMessage(0);
    }

    final static int NUM_SAMPS = 1000;
    static double[][] correlation;

    void initializeArrays() {
        if(correlation!=null) return;

        correlation = new double[NUM_SAMPS][NUM_SAMPS];
        for(int k=0; k<NUM_SAMPS; k  ){
            for(int m=0; m<NUM_SAMPS; m  ){
                correlation[k][m] = Math.cos(2*Math.PI*(k m)/1000);
            }
        }
    }
}
 

res/layout/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:orientation="vertical" >


    <TextView
        android:id="@ id/test"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

</LinearLayout>
 

res/layout/loading.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">

    <TextView android:id="@ id/loading"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Consuming..."/>
</LinearLayout>
 

AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.cookbook.handle_message"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".HandleMessage" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
 

Ответ №1:

Может быть, вам просто нужен индикатор выполнения или что-то в этом роде? Смотрите Эту страницу для примера, который показывает, как начать действие с длительным потоком, который обновляет индикатор выполнения по мере его выполнения.

Кроме того, вы указали, что LogCat ничего не говорит. Поместите некоторые операторы Log.i в свой код, чтобы увидеть, что происходит.

РЕДАКТИРОВАТЬ: Хорошо, в приведенном выше коде не используйте 2 макета. Используйте только 1. Затем в вашем обработчике измените текст textview.

Так что, если вы используете loading.xml , установите это в onCreate, а затем в вашем обработчике просто сделайте что-то вроде:

  public void handleMessage(Message msg) {
        TextView tv=(TextView)findViewById(R.id.loading);
        tv.setText("All Done");
    }
 

Понял? Определенно не вызывайте setContentView дважды для такого рода вещей. Может быть, есть способ сделать это, так что, возможно, у него есть свое применение, но я никогда этого не делал. Кроме того, в качестве примечания, я начал использовать AsyncTask вместо потоков и обработчиков для некоторых вещей.

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

Комментарии:

1. Я просто хочу, чтобы он отображал простую текстовую заставку во время выполнения фоновой задачи.