I tried to debug this thing for hours, and I really don't see a problem here.
This is my MainActivity. The main thing is to search here ArrayList<Servico>, being a Servicocustom object. I created a simple class "event" - ServicoActual- which only has a reference to the object Servico(and the / getter constructor):
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.SearchManager;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import net.pedromoreira.billper.events.ServicoActual;
import java.util.ArrayList;
import java.util.Locale;
import de.greenrobot.event.EventBus;
public class MainActivity extends Activity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mDrawerTitle;
private CharSequence mTitle;
private ArrayList<Servico> servicos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
servicos = new ArrayList<Servico>();
servicos.add(new Servico("Luz"));
servicos.add(new Servico("Água"));
servicos.add(new Servico("Gás"));
setContentView(R.layout.activity_main);
mTitle = mDrawerTitle = getTitle();
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
mDrawerList.setAdapter(new ArrayAdapter<Servico>(this,
R.layout.drawer_list_item, servicos));
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(
this,
mDrawerLayout,
R.drawable.ic_drawer,
R.string.drawer_open,
R.string.drawer_close
) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null) {
selectItem(0);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.action_websearch).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
switch(item.getItemId()) {
case R.id.action_websearch:
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, getActionBar().getTitle());
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
} else {
Toast.makeText(this, R.string.app_not_available, Toast.LENGTH_LONG).show();
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
Log.i("DrawerItemClickListener", "Position: " + position);
}
}
private void selectItem(int position) {
Fragment fragment = new ServicoFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
Log.i("selectItem", "Servico: " + servicos.get(position).getNome());
EventBus.getDefault().postSticky(new ServicoActual(servicos.get(position)));
mDrawerList.setItemChecked(position, true);
setTitle(servicos.get(position).getNome());
mDrawerLayout.closeDrawer(mDrawerList);
}
@Override
public void setTitle(CharSequence title) {
mTitle = title;
getActionBar().setTitle(mTitle);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
public static class ServicoFragment extends Fragment {
private TextView mTestText;
public ServicoFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().registerSticky(this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_servico, container, false);
mTestText = ((TextView) rootView.findViewById(R.id.test_text));
Log.i("onCreateView", "mTestText: " + mTestText.toString());
mTestText.setText("xpto");
return rootView;
}
public void onEvent(ServicoActual e){
Servico servico = e.getServico();
Log.i("onEvent", "Servico: " + servico.getNome());
getActivity().setTitle(servico.getNome());
mTestText.setText(servico.getNome());
}
}
}
So, when I clicked on the box list item, I try to pass the corresponding Servico(inside the event ServicoActual") to ServicoFragment, which should write the name Servicoin it TextView.
This is what happens with one click on the first element (0):
07-13 00:50:35.388 26244-26244/net.pedromoreira.billper I/ViewRootImpl﹕ ViewRoot Touch Event : Touch Down
07-13 00:50:35.628 26244-26244/net.pedromoreira.billper I/ViewRootImpl﹕ ViewRoot Touch Event : Touch UP
07-13 00:50:36.308 26244-26244/net.pedromoreira.billper I/ViewRootImpl﹕ ViewRoot Touch Event : Touch Down
07-13 00:50:36.358 26244-26244/net.pedromoreira.billper I/ViewRootImpl﹕ ViewRoot Touch Event : Touch UP
07-13 00:50:36.428 26244-26244/net.pedromoreira.billper I/selectItem﹕ Servico: Luz
07-13 00:50:36.428 26244-26244/net.pedromoreira.billper I/onEvent﹕ Servico: Luz
07-13 00:50:36.458 26244-26244/net.pedromoreira.billper E/Event﹕ Could not dispatch event: class net.pedromoreira.billper.events.ServicoActual to subscribing class class net.pedromoreira.billper.MainActivity$ServicoFragment
java.lang.NullPointerException
at net.pedromoreira.billper.MainActivity$ServicoFragment.onEvent(MainActivity.java:235)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at de.greenrobot.event.EventBus.invokeSubscriber(EventBus.java:569)
at de.greenrobot.event.EventBus.postToSubscription(EventBus.java:500)
at de.greenrobot.event.EventBus.postSingleEvent(EventBus.java:475)
at de.greenrobot.event.EventBus.post(EventBus.java:365)
at de.greenrobot.event.EventBus.postSticky(EventBus.java:406)
at net.pedromoreira.billper.MainActivity.selectItem(MainActivity.java:161)
at net.pedromoreira.billper.MainActivity.access$300(MainActivity.java:35)
at net.pedromoreira.billper.MainActivity$DrawerItemClickListener.onItemClick(MainActivity.java:146)
at android.widget.AdapterView.performItemClick(AdapterView.java:299)
at android.widget.AbsListView.performItemClick(AbsListView.java:1158)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:2957)
at android.widget.AbsListView$3.run(AbsListView.java:3849)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
07-13 00:50:36.458 26244-26244/net.pedromoreira.billper I/onEvent﹕ Servico: Luz
07-13 00:50:36.468 26244-26244/net.pedromoreira.billper D/Event﹕ No subscribers registered for event class de.greenrobot.event.SubscriberExceptionEvent
07-13 00:50:36.468 26244-26244/net.pedromoreira.billper I/DrawerItemClickListener﹕ Position: 0
07-13 00:50:36.498 26244-26244/net.pedromoreira.billper I/onEvent﹕ Servico: Luz
07-13 00:50:36.508 26244-26244/net.pedromoreira.billper E/Event﹕ Could not dispatch event: class net.pedromoreira.billper.events.ServicoActual to subscribing class class net.pedromoreira.billper.MainActivity$ServicoFragment
java.lang.NullPointerException
at net.pedromoreira.billper.MainActivity$ServicoFragment.onEvent(MainActivity.java:236)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at de.greenrobot.event.EventBus.invokeSubscriber(EventBus.java:569)
at de.greenrobot.event.EventBus.postToSubscription(EventBus.java:500)
at de.greenrobot.event.EventBus.subscribe(EventBus.java:288)
at de.greenrobot.event.EventBus.register(EventBus.java:189)
at de.greenrobot.event.EventBus.registerSticky(EventBus.java:166)
at net.pedromoreira.billper.MainActivity$ServicoFragment.onCreate(MainActivity.java:209)
at android.app.Fragment.performCreate(Fragment.java:1688)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:860)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1063)
at android.app.BackStackRecord.run(BackStackRecord.java:684)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1450)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:444)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
07-13 00:50:36.508 26244-26244/net.pedromoreira.billper D/Event﹕ No subscribers registered for event class de.greenrobot.event.SubscriberExceptionEvent
07-13 00:50:36.508 26244-26244/net.pedromoreira.billper I/onCreateView﹕ mTestText: android.widget.TextView{429216d0 V.ED.... ......ID 0,0-0,0
What can i do wrong?