2017-02-15 2 views
-1

Я сохранил список в activity_main_one, и список заполняется массивом. Теперь я сохранил searchview в activity_main_page, чтобы найти этот список. Но вместо этого я получаю сообщение об ошибке:Ссылка на нулевой объект при вызове виртуального метода при сопоставлении списка, который находится в другом действии

Attempt to invoke virtual method 'void com.example.abc.hotelomania.MainActivity1.initList()' on a null object reference

Код activity_main_one находится в MainActivity1.class

MainActivity1.class

public class MainActivity1 extends ActionBarActivity { 

String[] items; 
ArrayList<String> listItems; 
ArrayAdapter<String> adapter; 
ListView listView; 
EditText editText; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_one); 
    initList(); 
    items=new String[]{"Canada","China","Japan","USA"}; 
     listItems=new ArrayList<>(Arrays.asList(items)); 
} 

public void initList(){ 
    adapter=new ArrayAdapter<String>(this, 
      R.layout.list_item, R.id.txtitem, listItems); 
    listView.setAdapter(adapter); 
} 
} 

MainPage.class

public class MainPage extends Activity { 
    MainActivity1 mn; 
    String[] items; 
    ArrayList<String> listItems; 
    ArrayAdapter<String> adapter; 
    ListView listView; 
    EditText editText; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_page); 
     items=new String[]{"Canada","China","Japan","USA"}; 

     listItems=new ArrayList<>(Arrays.asList(items)); 
     listView=(ListView)findViewById(R.id.listview); 
    editText=(EditText)findViewById(R.id.txtsearch); 
    mn.initList(); 
    editText.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if(s.toString().equals("")){ 
       // reset listview 
       mn.initList(); 
     } 
     else { 
       // perform search 
       searchItem(s.toString()); 
     } 
    } 
    @Override 
    public void afterTextChanged(Editable s) { 
    } 
    }); 
} 
    public void searchItem(String textToSearch){ 
    for(String item:items){ 
     if(!item.contains(textToSearch)){ 
      listItems.remove(item); 
     } 
    } 
    adapter.notifyDataSetChanged(); 
    } 
+0

Вы удаляете элементы во время поиска в своем DataList. –

+0

Нет ли номера строки в сообщении об ошибке? –

+0

MainPage.java строка 41, так что эта часть 'editText (EditText) findViewById (R.id.txtsearch); mn.initList(); ' – nikiii

ответ

0

MainActivity.java Похожые

public class MainActivity1 extends ActionBarActivity { 

String[] items; 
ArrayList<String> listItems; 
ArrayAdapter<String> adapter; 
ListView listView; 
EditText editText; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_one); 
    initList(); 
} 

public void initList() { 
    items = new String[]{"Canada", "China", "Japan", "USA"}; 
    listItems = new ArrayList<>(Arrays.asList(items)); 
    adapter = new ArrayAdapter<String>(this, 
      R.layout.list_item, R.id.txtitem, listItems); 
    listView.setAdapter(adapter); 
} 

} 
+0

initList() является частью класса MainActivity1, поэтому, когда я вызываю его из MainPage.class, как вы сказали, это дает мне ошибку. Я создал экземпляр MainActivity1 как «MainActivity1 mn', и я назвал его следующим образом:« mn.initList(); « – nikiii

+0

» Я отредактировал свой ответ, но ваш способ доступа к MainActivity неверен, вы должны изменить его, потому что он всегда возвращается ноль. –

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