2012-04-26 2 views
1

OnItemClickListener 구현이 정의되어 있으며, 애플리케이션 전체에서 여러 액티비티 및 단편에서 사용합니다. 현재 Activity을 생성자에 전달 중이므로 오류가 발생하지 않고 startActivity을 호출 할 수 있습니다. 이것이 적절한 접근법인지 확신 할 수 없었습니다.공유 리스너 및 액티비티 인스턴스 전달

내가 잘못하고있는 것이 있습니까?

public class EventSelectedListener implements AdapterView.OnItemClickListener { 

    private Activity mActivity; 
    private Context mContext; 

    public EventSelectedListener(Activity activity) { 
     mActivity = activity; 
     mContext = mActivity.getApplicationContext(); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
     Intent intent = new Intent();    
     intent.setClass(mContext, MediaPlayerActivity.class); 
     mActivity.startActivity(intent);  
    } 
} 

답변

2

응용 프로그램의 컨텍스트와 활동의 컨텍스트는 동일하지 않습니다. 코드에서 Activity의 컨텍스트를 사용해야합니다.

변경이 :

mContext = mActivity; 

또는 또는

, 당신은 심지어 mActivity 때문에 별도의 컨텍스트 개체를 유지 대해 귀찮게 필요가없는 : 여기에

mContext = mActivity.getApplicationContext(); 

이미 문맥에 대한 참조를 가지고 있습니다.

public class EventSelectedListener implements AdapterView.OnItemClickListener { 

    private Activity mActivity; 

    public EventSelectedListener(Activity activity) { 
     mActivity = activity; 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
     Intent intent = new Intent();    
     intent.setClass(mActivity, MediaPlayerActivity.class); 
     mActivity.startActivity(intent);  
    } 
} 
+0

감사 : 그래서, 단순히 당신이 컨텍스트를 참조 할 필요가 이제까지 mActivity를 사용합니다. 훌륭한 의견. – Steve

관련 문제