2010-12-08 42 views
-1
public class testMultiAutoCompleteTextView extends ListActivity { 
/** Called when the activity is first created. */ 
private MultiAutoCompleteTextView searchEdit; 
Button okButton; 
private ArrayAdapter<String> adapter = null; 

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

    adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, mStrings); 

    setListAdapter(adapter); 

    searchEdit = (MultiAutoCompleteTextView) findViewById(R.id.search_box); 

    searchEdit.addTextChangedListener(filterTextWatcher); 

    searchEdit.setTokenizer(new SpaceTokenizer()); 

    searchEdit.setAdapter(adapter); 

    searchEdit.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      String t = ((TextView) v).getText().toString(); 
      String f = searchEdit.getText().toString(); 

      int s = searchEdit.getSelectionStart(); 
      int i = s; 

      while (i > 0 && f.charAt(i - 1) != ' ') { 
       i--; 
      } 

      adapter.getFilter().filter(t.substring(i, s)); 
     } 
    }); 

    okButton = (Button) findViewById(R.id.ok); 
    okButton.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      Bundle stats = new Bundle(); 
      stats.putString("ConversationName", searchEdit.getText() 
        .toString()); 

      Intent i = new Intent(); 
      i.putExtras(stats); 
      setResult(RESULT_OK, i); 
      finish(); 
     } 
    }); 

    searchEdit.setOnKeyListener(new OnKeyListener() { 

     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT 
        || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT 
        || keyCode == KeyEvent.KEYCODE_DPAD_UP 
        || keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { 

       String t = ((TextView) v).getText().toString(); 
       String f = searchEdit.getText().toString(); 

       int s = searchEdit.getSelectionStart(); 
       int i = s; 

       while (i > 0 && f.charAt(i - 1) != ' ') { 
        i--; 
       } 

       adapter.getFilter().filter(t.substring(i, s)); 

       return false; 
      } 

      return false; 
     } 
    }); 

    getListView().setOnItemClickListener(
      new ListView.OnItemClickListener() { 
       public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 

        String t = adapter.getItem(position); 
        String f = searchEdit.getText().toString(); 

        int s = searchEdit.getSelectionStart(); 
        int i = s; 

        while (i > 0 && f.charAt(i - 1) != ' ') { 
         i--; 
        } 

        searchEdit.getText().insert(s, t.substring(s - i)); 
       } 
      }); 
} 


    @Override 
protected void onDestroy() { 
    super.onDestroy(); 
    searchEdit.removeTextChangedListener(filterTextWatcher); 
} 


private TextWatcher filterTextWatcher = new TextWatcher() { 

    public void afterTextChanged(Editable s) { 
     okButton.setEnabled(searchEdit.getText().toString().trim() 
       .length() > 0); 
    } 

    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); 
    } 

}; 



public class SpaceTokenizer implements Tokenizer { 

public int findTokenStart(CharSequence text, int cursor) { 
    int i = cursor; 

    while (i > 0 && text.charAt(i - 1) != ' ') { 
     i--; 
    } 
    while (i < cursor && text.charAt(i) == ' ') { 
     i++; 
    } 

    return i; 
} 

public int findTokenEnd(CharSequence text, int cursor) { 
    int i = cursor; 
    int len = text.length(); 

    while (i < len) { 
     if (text.charAt(i) == ' ') { 
      return i; 
     } else { 
      i++; 
     } 
    } 

    return len; 
} 

public CharSequence terminateToken(CharSequence text) { 
    int i = text.length(); 

    while (i > 0 && text.charAt(i - 1) == ' ') { 
     i--; 
    } 

    if (i > 0 && text.charAt(i - 1) == ' ') { 
     return text; 
    } else { 
     if (text instanceof Spanned) { 
      SpannableString sp = new SpannableString(text + " "); 
      TextUtils.copySpansFrom((Spanned) text, 0, text.length(), 
        Object.class, sp, 0); 
      return sp; 
     } else { 
      return text + " "; 
     } 
    } 
} 
} 
private String[] mStrings = { 

      "Vacherin-Fribourgeois", "Valencay", "Vasterbottenost", "Venaco", "Vendomois", 
      "Vieux Corse", "Vignotte", "Vulscombe", "Waimata Farmhouse Blue", 
      "Washed Rind Cheese (Australian)", "Waterloo", "Weichkaese", "Wellington", 
      "Wensleydale", "White Stilton", "Whitestone Farmhouse", "Wigmore", "Woodside Cabecou", 
      "Xanadu", "Xynotyro", "Yarg Cornish", "Yarra Valley Pyramid", "Yorkshire Blue", 
      "Zamorano", "Zanetti Grana Padano", "Zanetti Parmigiano Reggiano"}; 

} 我的xml:约MultiAutoCompleteTextView

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" android:layout_height="fill_parent" 
     android:orientation="vertical" 
     android:drawingCacheQuality="high"> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" android:layout_height="wrap_content" 
     android:orientation="horizontal"> 


<MultiAutoCompleteTextView 
    android:layout_marginLeft="1dip" 
    android:layout_marginTop="1dip" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:layout_width="fill_parent" 
    android:dropDownHeight="0px" 
    android:hint="@string/To" 
    android:id="@+id/search_box" 
    ></MultiAutoCompleteTextView> 



<Button android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Ok" 
    android:id="@+id/ok" 
    android:enabled="false" 
    /> 


    </LinearLayout>  
    <ListView android:id="@android:id/list" android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:layout_weight="1" /> 

    </LinearLayout> 

它给我的错误/ AndroidRuntime(423):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.test.testMultiAutoCompleteTextView/COM。 test.testMultiAutoCompleteTextView.testMultiAutoCompleteTextView}:显示java.lang.NullPointerException

回答

2

在onCreate方法之前调用

adapter = new ArrayAdapter<String>(this, 
     android.R.layout.simple_list_item_1, mStrings); 

你必须设置你的布局

setContentView(R.layout.you_xml_file_name); 
+0

感谢您的回答 – pengwang 2010-12-11 05:23:59

相关问题