12

外部データに基づいてレイアウトを取得するアプリを作成しています。レイアウトは、入力データに応じて異なるブロックに分割されます。これらのブロックは、ビューフリッパーを使用して表示されます。各ブロックには、当面の間、1つ以上の「textview」と「edittext」があります。フリッパーの最初のページでは、すべてのデータがテキストビューとエディットテキストに表示されているはずです。ただし、ビューフリッパーの他のページでは、編集テキストがフォーカスされるまで、編集テキストの値は表示されません。理由はわかりません。明確にするために。すべてのエディットテキストの値は実際にはそこにありますが、エディットテキストがフォーカスされるまで表示されません。問題は、アプリを実行したすべてのデバイス(エミュレーター、HTC Desire、HTC Wildfire)で同じです。誰かがこの問題を解決する方法を知っていますか?

レイアウトを生成するクラスは次のとおりです。

public class ModuleLayout extends LinearLayout {

public ModuleLayout(Context context, ArrayList<BaseModuleItem> itemList) {
    super(context);
    TableLayout tempTable = new TableLayout(context);

        for (int i = 0; i < itemList.size(); i++)
        {
            TableRow tempRow = new TableRow(context);
            TextView tempTextView = new TextView(context);
            tempTextView.setText(itemList.get(i).getName());

            EditText tempEditText = new EditText(context);
            tempEditText.setText(itemList.get(i).getItemValue());

            tempRow.addView(tempTextView);
            tempRow.addView(tempEditText);

            tempTable.addView(tempRow);
        }

        tempTable.setColumnStretchable(1, true);
        this.addView(tempTable);
    }
}

これが実際の問題の写真です。

左の画像は、そのすべての値を正常に表示しています。右の画像はビューフリッパーの2番目の位置にあり、フォーカスのある最初の画像を除いて、編集テキストの値は表示されません。また、エディットテキストがフォーカスを取得した後、ビューフリッパーの他のビューに移動してから戻っても、値が表示され続けることにも言及する必要があります。

4

2 に答える 2

1

ここに表示されるレイアウトは UI スレッド上にはありません。つまり、何を変更しても、UI スレッド (メイン スレッドとも呼ばれます) が更新されるまで何も表示されません。UI/メイン スレッドは、すべてのアクティビティが実行されるものであるため、自動的に更新されると考えるのは簡単です (これまでに行った作業のほとんどは、アクティビティ内のどこかにあると思います)。onFocusChanged イベント (edittext をクリック) は、それ自体で invalidate() を呼び出して UI スレッドを更新します。必要に応じて EditText.invalidate() を呼び出して強制的に更新することもできますが、通常は作成後に自然に更新することをお勧めします。あなたのコードの残りの部分を見なくても、これが私ができる最善の方法です。これがお役に立てば幸いです:)

于 2011-09-12T19:40:20.647 に答える
0

あなたの完全なコードを見ていないので、ちょっとした推測ですが、textView.invalidate() (GUI スレッドから呼び出す場合) または textView.postInvalidate() (別のスレッドから呼び出す場合) を試しましたか?

于 2011-09-01T08:51:33.397 に答える