-1

I have kept a listview in the activity_main_one and the list is filled by an array. Now i have kept a searchview in activity_main_page to search that list. But instead i am getting an error :

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

The code of activity_main_one is in 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();
    }
Siddharth
  • 8,842
  • 13
  • 79
  • 133
nikiii
  • 3
  • 3

1 Answers1

0

MainActivity.java Looks like

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);
}

}
divyansh ingle
  • 322
  • 1
  • 9
  • initList() is part of the MainActivity1 class so when i call it from MainPage.class direcrtly like you said, it gives me error. I created an instance of MainActivity1 as `MainActivity1 mn` and i called it like this `mn.initList();` – nikiii Feb 15 '17 at 08:01
  • I edited my answer but your way of accessing the MainActivity is not right, you should change it because it return always be null. – divyansh ingle Feb 15 '17 at 08:07