java - Android- ActionBar AutoCompleteTextview

标签 java android xml android-actionbar menuitem

我通过将项目添加到菜单文件夹中的 xml 并膨胀它,在我的 Actionbar 中添加了一个 AutoCompleteTextview。但是我无法为我的字符串 [] 设置适配器,因为引用 AutoCompleteTextview 会导致第 35 行出现错误,即 。

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

如何解决这个问题并让它在我的actionbar中正常工作。

菜单> 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>

ma​​inactivity.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;
}

逻辑猫

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$1.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);
}

有关更多信息,请参阅以下链接:-

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

关于java - Android- ActionBar AutoCompleteTextview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28230474/

相关文章:

xml - 编写允许来自其他命名空间的限定属性的 XML 模式

java - 可以从java获取客户端mac地址吗?

android - 如何在布局(不是 Activity )之间添加过渡

java - 使用 jdom 向现有 xml 添加内容

.NET 的 System.Xml.Schema 类的 Java 等价物?

javascript - react native Android 生成签名 APK 给出资源错误

java - inputstream.available() 始终为 0

java - 如何在 Android 中为动态选择的图像创建 savedInstanceState?

java - 在 JDBI/Dropwizard 应用程序中使用@Transaction

android - Android 移动应用程序可以在 Android 平板电脑上运行吗?