1

EditText と ListView を含むカスタム ダイアログを Android で作成しました。リスト ビュー onItemClickListener は、アイテムを選択すると正しく起動されますが、EditText のリスナーには当てはまりません。

これは私のコードです:

EditText filterEditText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

LayoutInflater factory = LayoutInflater.from(this);
View content = factory.inflate(R.layout.dialog_layout, null);
filterEditText = (EditText) content
        .findViewById(R.id.filterEditText);
filterEditText.addTextChangedListener(txtListener);

............


    TextWatcher txtListener = new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {

            filterEditText.setText("text entered");
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {
            // TODO Auto-generated method stub
        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub
        }
    };
4

1 に答える 1

4

投稿を削除しようとしていましたが、誰かが同じ問題に直面した場合に備えて解決策を掲載することにしました.

コードを onCreate からダイアログを作成したメソッドに移動することで解決しました。

public void createLocationsDialog() {

    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

    builder.setTitle("Choose a location");

    LayoutInflater factory = LayoutInflater.from(MainActivity.this);
    View content = factory.inflate(R.layout.dialog_layout, null);

    ListView locationsList = (ListView) content
            .findViewById(R.id.locationsListView);
    filterEditText = (EditText) content
            .findViewById(R.id.filterEditText);

    ArrayAdapter<String> modeAdapter = new ArrayAdapter<String>(
            MainActivity.this, android.R.layout.simple_list_item_1,
            data.getName());
    locationsList.setAdapter(modeAdapter);

    builder.setView(content);

    locationsDialog = builder.create();

    locationsList.setOnItemClickListener(listItemClicked);
    filterEditText.addTextChangedListener(txtListener);

    locationsDialog.show();
}
于 2013-05-01T19:51:21.717 に答える