2016-01-03 2 views
0

Я учусь actionviews и следуя краткое руководство: http://wptrafficanalyzer.in/blog/adding-custom-action-view-to-action-bar-in-android/Ссылка на объект становится нулевой на вызов методы findViewById()

Но я не знаю, почему объект EditText становится нулевым на время выполнения. Пожалуйста, помогите мне с этим.

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

я сделал: search_layout.xml и items.xml. Спасибо – androider

ответ

0

В своем комментарии вы указали, что имена файлов xml: search_layout.xml и items.xml. Теперь в вашем коде, вы увидите строку:

setContentView(R.layout.activity_main); 

И это важно, так слушайте: Эта строка кода в основном говорит, вот соответствующий XML-файл (ресурсный элемент макета), который принадлежит к этому классу java. Теперь, в чем смысл этого? Ну, если вы хотите получить доступ к тому, что находится в содержимом xml-файла с именем hello, и изменить изображение кнопки изображения, вы не можете сделать это, пока не укажете , где находится эта кнопка изображения.

XML: Я выгляжу так, как выглядит экран!

Java: Я как-то с некоторыми экранами. Какой экран? Ну, этот экран описан в строке setContentView.

Итак, по мере того, как вы углубляетесь в андроид, вы начнете получать все больше XML-файлов, и вам нужно указать, о ком вы говорите, так что Java (который является мозгом вашей программы) знает что делать и где это делать.

Надеюсь, что это помогло, дайте мне знать, если это так!

Ruchir

+0

Спасибо за четкие объяснения, я получил приложение работает! – androider

0

Ваш setContentView(R.layout.activity_main); расположение ссылается на неправильный файл. Изменить на (я думаю, это имя файла) setContentView(R.layout.search_layout);

+0

Получил, спасибо! – androider

Смежные вопросы