#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. Я просто хочу, чтобы он отображал простую текстовую заставку во время выполнения фоновой задачи.