Android- ActionBar AutoCompleteTextview

Android- ActionBar AutoCompleteTextview

我通过将项目添加到菜单文件夹中的 xml 并膨胀 it.But 在我的 Actionbar 中添加了一个 AutoCompleteTextview,因为引用 AutoCompleteTextview 导致错误第35行,即.

AutoCompleteTextView et=(AutoCompleteTextView)menu.findItem(R.id.search_bar).getActionView().findViewById(R.id.edt);

如何解决这个问题并使其在我的操作栏中正常工作。

菜单>main.xml

<item
    android:id="@+id/action_search"
    android:orderInCategory="100"
    android:showAsAction="always"
    android:actionLayout="@layout/search_bar"/>

search_bar.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/edt"
    android:layout_width="50dp"
    android:layout_height="wrap_content"/>

</LinearLayout>

mainactivity.java

public class MainActivity extends Activity {

String [] products={"candle stick 1","candlestick 3","sglc10","senson","lawn"};

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


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    ActionBar actionBar = getActionBar();
    actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#00ffff")));
    actionBar.setSubtitle("mytest");
    actionBar.setTitle("welcome"); 

//      AutoCompleteTextView et=(AutoCompleteTextView)menu.findItem(R.id.search_bar).getActionView().findViewById(R.id.edt);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, products);
//      et.setAdapter(adapter);

    return true;
}

Logcat

01-30 01:13:18.309: E/AndroidRuntime(1804): FATAL EXCEPTION: main
01-30 01:13:18.309: E/AndroidRuntime(1804): Process: com.example.action_bar, PID: 1804
01-30 01:13:18.309: E/AndroidRuntime(1804): java.lang.NullPointerException
01-30 01:13:18.309: E/AndroidRuntime(1804):     at com.example.action_bar.MainActivity.onCreateOptionsMenu(MainActivity.java:35)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at android.app.Activity.onCreatePanelMenu(Activity.java:2537)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:436)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:800)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at com.android.internal.policy.impl.PhoneWindow.run(PhoneWindow.java:221)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at android.view.Choreographer.doCallbacks(Choreographer.java:562)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at android.view.Choreographer.doFrame(Choreographer.java:531)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at android.os.Handler.handleCallback(Handler.java:733)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at android.os.Handler.dispatchMessage(Handler.java:95)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at android.os.Looper.loop(Looper.java:137)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at android.app.ActivityThread.main(ActivityThread.java:4998)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at java.lang.reflect.Method.invokeNative(Native Method)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at java.lang.reflect.Method.invoke(Method.java:515)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
01-30 01:13:18.309: E/AndroidRuntime(1804):     at dalvik.system.NativeStart.main(Native Method)

试试下面的代码:-

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    /** Create an option menu from res/menu/items.xml */
    getMenuInflater().inflate(R.menu.items, menu);

    /** Get the action view of the menu item whose id is search */
    View v = (View) menu.findItem(R.id.search).getActionView();

    /** Get the edit text from the action view */
    EditText txtSearch = ( EditText ) v.findViewById(R.id.txt_search);

    /** Setting an action listener */
    txtSearch.setOnEditorActionListener(new OnEditorActionListener() {

        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            Toast.makeText(getBaseContext(), "Search : " + v.getText(), Toast.LENGTH_SHORT).show();
            return false;
        }
    });

    return super.onCreateOptionsMenu(menu);
}

更多信息见下文link:-

http://wptrafficanalyzer.in/blog/adding-custom-action-view-to-action-bar-in-android/