【问题标题】:How to use Autocompletetext view in Dialog window in Android如何在 Android 的 Dialog 窗口中使用 Autocompletetext 视图
【发布时间】:2015-01-05 11:28:26
【问题描述】:

在我的应用程序中,我想在对话框窗口中显示自动完成文本视图,如果运行我的应用程序,我无法从 MainActivity 显示对话框窗口。谁能帮帮我。

MainActivity.java

public class MainActivity extends Activity {
     private static Context context;

    Button okButton; 

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);       
        final View addView = getLayoutInflater().inflate(R.layout.activity_main, null); 
       MainActivity.context = getApplicationContext();
       Button search = (Button)findViewById(R.id.btn_save);
       search.setOnClickListener(showSearch);
         }

    private OnClickListener showSearch = new OnClickListener()
      {

        public void onClick(View v)
        {      
               CityListDialog obj=new CityListDialog(context, COUNTRIES);
        }
          };

    public static Context getAppContext() {
        return MainActivity.context;
    }

    static final String[] COUNTRIES = new String[] { 
          "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra", 
          "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", 
          "Argentina","Armenia", "Aruba", "Australia", "Austria", "Azerbaijan", 
          "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium" 
        }; 
}

CityListDialog.java

public class CityListDialog extends Dialog implements OnClickListener {

private ListView list;
private EditText filterText = null;
ArrayAdapter<String> adapter = null;
private static final String TAG = "CityList";

public CityListDialog(Context context, String[] cityList) {
    super(context);

    setContentView(R.layout.citylistview);
    this.setTitle("Select City");
    filterText = (EditText) findViewById(R.id.EditBox);
    filterText.addTextChangedListener(filterTextWatcher);
    list = (ListView) findViewById(R.id.List);
    adapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, cityList);
    list.setAdapter(adapter);
    list.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id) {
            Log.d(TAG, "Selected Item is = "+list.getItemAtPosition(position));
                }
    });
}
public void onClick(View v) {
}
private TextWatcher filterTextWatcher = new TextWatcher() {

    public void afterTextChanged(Editable s) {
    }

    public void beforeTextChanged(CharSequence s, int start, int count,int after) {
    }
    public void onTextChanged(CharSequence s, int start, int before,int count) {
        adapter.getFilter().filter(s);
    }
};
@Override
public void onStop(){
    filterText.removeTextChangedListener(filterTextWatcher);
}
}

【问题讨论】:

    标签: android android-dialog android-2.2-froyo


    【解决方案1】:
    import android.app.Activity;
    import android.app.Dialog;
    import android.content.Context;
    import android.os.Bundle;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.view.Gravity;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.Window;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.AutoCompleteTextView;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;
    
    public class MainActivity extends Activity {
        private static Context context;
    
       Button okButton; 
    
       public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);       
           final View addView = getLayoutInflater().inflate(R.layout.activity_main, null); 
         context = this.getApplicationContext();
          Button search = (Button)findViewById(R.id.btn_save);
          search.setOnClickListener(showSearch);
            }
    
       private OnClickListener showSearch = new OnClickListener()
         {
    
           public void onClick(View v)
           {      
                  showDialogList();
           }
    
    
             };
    
       public static Context getAppContext() {
           return MainActivity.context;
       }
    
       static final String[] COUNTRIES = new String[] { 
             "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra", 
             "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", 
             "Argentina","Armenia", "Aruba", "Australia", "Austria", "Azerbaijan", 
             "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium" 
           }; 
    
    
       private void showDialogList() {
            final Dialog dialog = new Dialog(this);
            View view = getLayoutInflater().inflate(R.layout.citylistview,null);
    
            ListView lv = (ListView) view.findViewById(R.id.List);
            final ArrayAdapter<String> adapter= new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, COUNTRIES);
            lv.setAdapter(adapter);
            AutoCompleteTextView  filterText = (AutoCompleteTextView ) view.findViewById(R.id.EditBox);
            filterText.setAdapter(adapter);
            dialog.setContentView(view);
            dialog.setCancelable(true);
            Window window = dialog.getWindow();
            window.setGravity(Gravity.CENTER);
    
            lv.setOnItemClickListener(new OnItemClickListener() {
    
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
    
                }
            });
            dialog.show();
            filterText.addTextChangedListener(new TextWatcher() {
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    // TODO Auto-generated method stub
    
                }
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count,
                        int after) {
                    // TODO Auto-generated method stub
    
                }
                @Override
                public void afterTextChanged(Editable s) {
                     adapter.getFilter().filter(s);
                }
            });
        }
    }
    

    替换你的 citylistview.xml 代码

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        <AutoCompleteTextView
            android:id="@+id/EditBox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
     >
     </AutoCompleteTextView>
            <ListView
                android:id="@+id/List"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >
            </ListView>
    
    </LinearLayout>
    

    【讨论】:

      【解决方案2】:

      我没有看到 .show();

      所以要修复我认为你必须这样做

      CityListDialog obj=new CityListDialog(context, COUNTRIES);
      obj.show();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-10
        • 2013-09-13
        • 2021-03-03
        • 2020-10-16
        • 2016-07-06
        • 1970-01-01
        • 2016-06-14
        • 1970-01-01
        相关资源
        最近更新 更多