10

FragmentListView이 있습니다. 어댑터에서 대화 상자를 만들고 싶습니다.조각에서 어댑터의 활동 컨텍스트 얻기

class ViewHolder { 
... 
    @Override 
    public void onClick(View v) { 
    ... 
    AlertDialog.Builder builder = new AlertDialog.Builder(mContext); 
    ... 
    } 
... 
} 

mContext 어댑터가 생성 될 때 글로벌 저장 내 Fragment로부터 Context입니다. 오류가 발생합니다.

unable to add window -- token null is not for an application

방법 getActivity() 어떻게 내 ActivityContext를 얻을 수 있으므로 사용할 수 없습니다?

+3

더 많은 코드를 게시하십시오. – Blackbelt

+0

'View.getContext()'? 어쨌든 :'어댑터가 생성 될 때 전역 저장'당신은 컨텍스트 (어떤 어플리케이션이 아닌)를 전역으로 저장합니까 (FSM은 우리를 제외합니까?)? – Selvin

+0

내 어댑터의 전역 변수에 컨텍스트를 저장합니다. fsm이 저를 저장해야합니까? (fsm 비행 spagetthi 괴물입니까?) – AdrianoCelentano

답변

14

어댑터를 만들 때 컨텍스트로 무엇을 전달합니까? 이 작업을 수행하지 않는 경우 this을 전달하십시오. 좀 더 많은 코드가 도움이 될 것입니다.

+0

아, 내가이 부분을 코딩하지 않은 결함은 내가 단편에서 얻을 contextContext 아니라 액티비티 컨텍스트, 슬리가 이것을 기대하지 않았다 – AdrianoCelentano

25

사용자 지정 어댑터가있는 경우 생성자를 Context 매개 변수로 변경하십시오.

public CustomAdapter(Context context, List<Item> items) { 
} 

그런 다음 생성자를 통해 컨텍스트를 저장할 인스턴스 변수를 만듭니다.

private Context mContext; //instance variable 

public CustomAdapter(Context context, List<Item> items) { 
    //some code 
    this.mContext= context; 
} 

이제 어댑터의 어느 곳에서나 mContext 변수를 사용할 수 있습니다.

어댑터를 작성하려면 활동에서 작성된 경우 'this'를 전달하거나 조각에서 작성된 경우 getActivity()을 전달하십시오.

mAdapter = new CustomAdapter(this, mArrayItems); 

희망이 있습니다.

+0

덕분에, 또한 오른쪽이었다 방향 – AdrianoCelentano

관련 문제