0

いくつかの背景
私は9行のTableLayoutを持っています。EditTextビューを1行に並べて正常に並べることができたため、TableLayoutを選択しました。以下に示すように、2行に6つのEditTextがありますが、繰り返しを避けるために、スペースを節約するために6つのうち2つだけを含め、不要な行の一部は正しく表示されていたため削除しました(TextViewのみ)。

問題
私が抱えている問題は、レイアウトのボタンを押した後、すべてのEditTextビューが消えることです。私のボタンはWCFRestfulサービスへの接続を開始しますが、AsyncTaskを使用して開始します。ユーザーを占有するための待機ダイアログがあり、トーストメッセージがポップアップすることがあります。これはすべて正常な動作です。完全に編集テキストは、ボタンを押すとすぐに消えます。

私はグーグルとstackoverflowで検索しました、そして私は同様の問題を見ました、しかし私が持っているのと同じ問題ではありません。非常に奇妙なのは、これは電話でデバッグしているときにのみ発生し、AVDエミュレーターでは発生しないことです。

統計
電話:T-Mobile myTouchQ LG-C800(FYI:最高の電話ではありません)私はそれを応援しました。
電話Androidバージョン:2.3.4(LGは明らかにアップデートを信じていません)
IDE:IntelliJ 11.1
Android SDK:4.0.3
Javaバージョン:1.7

質問
1.別のレイアウトを使用する必要がありますか?
2.なぜこれが起こっているのか手がかりはありますか?

これが私のLayout.xmlの短縮版です:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@+id/tableLayout1"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent" >
    <TableRow android:id="@+id/rowTitleWinningNumbers"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:padding="0dip" >
        <TextView android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="Winning Numbers" />
    </TableRow>
    <TableRow android:id="@+id/rowWinningNumbers"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:padding="0dip" >
        <EditText android:id="@+id/txtLotto1"
                  android:inputType="text"
                  android:layout_width="0dp"
                  android:layout_weight="16.67"
                  android:editable="false"
                  android:focusable="false" />
        <EditText android:id="@+id/txtLotto2"
                  android:inputType="text"
                  android:layout_width="0dp"
                  android:layout_weight="16.67"
                  android:editable="false"
                  android:focusable="false" />
    </TableRow>
    <TableRow android:id="@+id/rowTitlePlayerNumbers"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:padding="0dip" >
        <TextView android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="Your Numbers" />
    </TableRow>
    <TableRow android:id="@+id/rowPlayerNumbers"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:padding="0dip" >
        <EditText android:id="@+id/txtPlayer1"
                  android:inputType="text"
                  android:layout_width="0dp"
                  android:layout_weight="16.67"
                  android:hint="@string/strDefaultNumber" />
        <EditText android:id="@+id/txtPlayer2"
                  android:inputType="text"
                  android:layout_width="0dp"
                  android:layout_weight="16.67"
                  android:hint="@string/strDefaultNumber" />
    </TableRow>
    <TableRow android:id="@+id/rowPlayerStatus2"
              android:layout_height="wrap_content"
              android:layout_width="wrap_content"
              android:gravity="center">
        <Button android:id="@+id/btnSubmit"
                android:text="Did I Win?!"
                android:onClick="btnSubmit_onClick" />
        <CheckBox android:id="@+id/cbxSavePlayerNumbers"
                  android:layout_height="wrap_content"
                  android:layout_width="wrap_content"
                  android:gravity="center"
                  android:lines="2"
                  android:text="Save my \nNumbers" />
    </TableRow>
</TableLayout>

コメントで要求されたコードを編集します

public void btnSubmit_onClick(View v)
{
    try
    {
        clearStatuses();

        setLabelText(R.id.lblTimeStamp, DateTime.Today().toString());

        savePlayerNumbers();

        //This method has to perform its main task asynchronously
        getWinningLotteryNumbers();
    }
    catch(Exception ex)
    {
        ex.toString();
    }
}

private void getWinningLotteryNumbers()
{
    try
    {
        _waitDialog = ProgressDialog.show(MyActivity.this, "Working", "Getting latest Lottery drawing, Please Wait...", true);

        getButton(R.id.btnSubmit).setEnabled(false);

        String strUrl = getRString(R.string.strWCFServiceURL);

        new LottoProxy().execute(strUrl);
    }
    catch (Exception e)
    {
        resetControlStates();
    }
}

private void clearStatuses()
{
    TextView lblStatus = getLabel(R.id.lblStatus);
    lblStatus.setText("");
    lblStatus.setTextColor(Color.BLACK);

    for (int i = 0; i < 6; i++)
        resetTextBoxBackResource(getWinningBox(i), getPlayerBox(i));
}

大変お世話になっておりますので、よろしくお願いいたします。これは私の最初の本物のアプリです(ただ遊んでいるのではなく)ので、初心者のミスをした場合は知らせてください。

4

1 に答える 1

0

したがって、EditText は消えていませんでしたが、使用可能なすべての EditText を反復処理して背景を黒に変更する clearStatuses() メソッドのために非表示になっていることがわかりました。どうやらこれを行うと、ストックの EditText 背景画像を上書きしているため、これはこれを処理するための待機ではありません。

気が遠くなる部分は、(上記のコメントで述べたように) onClick() メソッドのすべてのコードをコメントアウトしましたが、とにかくこれが発生しました。したがって、問題を特定することはかなり難しく、混乱を招きました。これはAndroidのバグなのだろうか?

次のコードを使用して、EditText を通常の外観に戻す方法を学びました。

yourEditText.setBackgroundResource(android.R.drawable.editbox_background_normal);

ここでこの答えを見つけました: EditText の背景色を削除する

このコードは EditText を元の外観に戻しますが、元の外観と一致しない可能性があります。それは私が経験したことなので、私はこれを言っていますが、それは私にとって十分です.

于 2012-08-25T15:59:08.913 に答える