2013-09-19 3 views
2

Я не знаю, что происходит, но я получаю исключение, и приложение зависает.Android взаимодействует с фрагментом

Основная деятельность:

public class MainAcitivty extends FragmentActivity implements OnClickListener 
{ 
    // ... 

    public interface OnItemSelectedListener 
    { 
     public void onItemSelected(int resourceId); 
    } 

    OnItemSelectedListener mCallback; 

    @Override 
    public void onClick(View v) 
    { 
     if (v.getId() == R.id.my_imageView) 
     { 
      mCallback.onItemSelected(R.id.my_imageView); 
     } 
    } 
} 

Фрагмент:

public MyFragment extends Fragment implements MainAcitivty.OnItemSelectedListener 
{ 
    @Override 
    public void onItemSelected(int resourceId) 
    { 
     Log.i("INFO", "Selected: " + resourceId); 
    } 
} 

Если я нажимаю на выбранную кнопку, приложение замирает и следующее исключение составляет бросок:

E/AndroidRuntime (21649): FATAL EXCEP ЦИЯ: Основной

Е/AndroidRuntime (21649): java.lang.NullPointerException

Е/AndroidRuntime (21649): в com.example.MainActivity.onClick (MainActivity.java:53)

E/AndroidRuntime (21649): в android.view.View.performClick (View.java:4232)

E/AndroidRuntime (21649): в android.view.View $ PerformClick.run (View.java: 17298)

Е/AndroidRuntime (21649): в android.os.Handler.handleCallback (Handler.java:615)

Е/AndroidRuntime (21649): в android.os.Handler.dispatchMessage (Handler.java:92)

Е/AndroidRuntime (21649): в android.os.Looper.loop (Looper.java:137)

Е/AndroidRuntime (21649): в android.app.ActivityThread.main (ActivityThread. java: 4921)

E/AndroidRuntime (21649): at java.lang.reflect.Method.invoke Родной (Родной метод)

Е/AndroidRuntime (21649): в java.lang.reflect.Method.invoke (Method.java:511)

E/AndroidRuntime (21649): в com.android .internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1027)

Е/AndroidRuntime (21649): в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:794)

E/AndroidRuntime (21649): at dalvik.system.NativeStart.main (родной метод)

+0

mCallback не инициируется –

ответ

1

Я не знаю, какая строка 53 является, но ваш mCallback, вероятно, не имеет значения. Проверьте это до разыменования.

4

в MyActivity Добавить метод

 
    public void addListener(MainAcitivty.OnItemSelectedListener listener){ 
     mCallback = listener; 
    } 

и вызывать этот метод в onViewCreated() из MyFragment.
((MyActivity) getActivity).addListener(this);

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