0

グループビューと子ビューの両方でカスタムレイアウトを読み込んでいるExpandableListViewがあります。

彼らはいくつかの編集テキストフィールドを持っています。

編集テキストをクリックすると、ソフトキーボードが表示され、リストが再ロードされますが、編集テキストにフォーカスが移りません。

その結果、私が入力している入力は、その編集テキストに入力されません。

編集テキストをもう一度クリックすると、値を入力できます。

しかし、リストビューをリロードした後でも、フォーカスを取り戻したいと思います。

requestFocus()リロード時に、最後にクリックしたビューを保存して一時変数に保存しようとしましたが、機能しません。

これを達成する方法..?

これがスクリーンショットです。

画像

誰かアイデアがあれば助けてください..!

前もって感謝します。

4

5 に答える 5

3

最後にクリックしたビューを保存し、リロード時に一時変数requestFocus()に保存しようとしましたが、機能しません。

何が機能していないのですか?アクティビティが再作成されているため、一時変数が失われていますか?もしそうなら、この答えはあなたを助けるかもしれません。

これまでExpandableListViewを使用したことはありませんが、コードで同様の問題を解決する必要がありました。向きが変わると、アクティビティが破棄されてから再作成されるのでonRetainNonConfigurationInstance()、保存したい情報を保存するために使用します。

サンプルコードは次のとおりです。

  protected StoredState mStoredState;

  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);

    final Object data = getLastNonConfigurationInstance();

    if (data == null)
    {
      // First time initialization
      mStoredState = new StoredState();
    }
    else
    {
      // StoredState data exists
      mStoredState = (StoredState)data;

      if (mStoredState.mFieldToGiveFocusTo != -1)
      {
        // Give focus to the field that had focus before the
        // activity was recreated
        View viewToFocus = findViewById(mStoredState.mFieldToGiveFocusTo);
        viewToFocus.requestFocus();
      }
    }
  }

  @Override
  public Object onRetainNonConfigurationInstance()
  {
    return mStoredState;
  }

  /**
   * Class to store the information about this activity when the orientation
   * is changed
   */
  private static class StoredState
  {
    int mFieldToGiveFocusTo;

    private StoredState()
    {
      mFieldToGiveFocusTo = -1;
    }
  }

mStoredState.mFieldToGiveFocusTo次に、ユーザーが最初にEditTextに触れたときを設定する必要があります。

于 2011-10-29T18:29:36.303 に答える
1

requestFocus()内部onCreate()またはの呼び出しで同様の問題が発生しましたonResume()。少し遅れてフォーカスを設定することで解決できました。このようなものがあなたのために働くかもしれません:

new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                viewToFocus.requestFocus();

            }
        }, 100);

問題の根本は、onResume()が処理された後にAndroidFrameworkがFocusを設定することだと思います。そのため、遅延が役立つ場合があります。

于 2011-10-31T14:05:24.323 に答える
0

ここで答えが見つかると思います: ExpandableListViewの子アイテムはタッチしてもフォーカスされません

この男はあなたと同じように聞こえる問題を抱えています。

于 2011-10-25T15:15:58.213 に答える
0

listViewが展開された後、この行を追加することにより、editTextに強制的にフォーカスを得ることができます。

editText.requestFocus();

于 2011-10-27T18:18:52.207 に答える
0

アクティビティのSoftInputキーボードを管理します。

android:windowSoftInputModeを見てください

于 2011-10-31T16:33:34.650 に答える