2017-02-15 50 views
-1

我在activity_main_one中保留了一个listview,并且该列表由数组填充。现在我已经在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的方式不对,你应该改变它,因为它总是返回空值。 –

相关问题