2017-02-15 25 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的方式不對,你應該改變它,因爲它總是返回空值。 –

相關問題