我正在学习动作视图并且正在学习这个简短的教程: http://wptrafficanalyzer.in/blog/adding-custom-action-view-to-action-bar-in-android/
但我不知道为什么EditText对象在运行时变为null。请帮帮我。
MainActivity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@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 TextView.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);
}
}
items.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/photo"
android:title="Photo"
app:showAsAction="ifRoom|withText"
/>
<item
android:id="@+id/video"
android:title="Video"
app:showAsAction="ifRoom|withText"
/>
<item
android:id="@+id/mobile"
android:title="Mobile"
app:showAsAction="ifRoom|withText"
/>
<item
android:id="@+id/search"
android:title="Search"
app:showAsAction="ifRoom|collapseActionView"
android:actionLayout="@layout/search_layout"
/>
</menu>
search_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<EditText
android:id="@+id/txt_search"
android:inputType="text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</RelativeLayout>
答案 0 :(得分:0)
您的iron-list
布局引用了错误的文件。更改为(我猜是文件的名称)setContentView(R.layout.activity_main);
答案 1 :(得分:0)
在您的评论中,您声明xml文件名为search_layout.xml
和items.xml
。现在,在您的代码中,您会注意到这一行:
setContentView(R.layout.activity_main);
这很重要,所以请听:这行代码基本上说,这里是属于这个java类的对应的xml文件(布局资源元素)。现在,有什么意义这个的?好吧,如果你想访问名为hello
的xml文件内容中的内容,并更改图像按钮的图像,则在指定图像按钮的位置之前,你不能这样做。< /强>
XML:我是屏幕的样子!
Java:我对某些屏幕做了什么。什么屏幕?好吧,该屏幕在setContentView
行中描述。
所以,当你深入到android时,你将开始获得越来越多的XML文件,你需要指定你正在谈论的那个,以便java(你的程序的大脑)知道什么做什么,去哪做。
希望这有帮助,如果有,请告诉我!
Ruchir