ListView
내 Android 응용 프로그램에서을 구현했습니다 . ListView
클래스의 커스텀 서브 클래스를 사용하여 이것에 바인딩합니다 ArrayAdapter
. 재정의 된 ArrayAdapter.getView(...)
메서드 내에서을 할당합니다 OnClickListener
. 의 onClick
방법 OnClickListener
에서 새로운 활동을 시작하고 싶습니다. 나는 예외를 얻는다 :
Calling startActivity() from outside of an Activity context requires the
FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
(현재 )가 작동 하고 Context
있다는 것을 어떻게 알 수 있습니까?ListView
Activity
답변
어느 한 쪽
- 어댑터의 생성자를 통해 Context 객체를 캐시하거나
- 당신의 관점에서 그것을 얻을.
또는 최후의 수단으로
- FLAG_ACTIVITY_NEW_TASK 플래그를 의도에 추가하십시오.
_
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
편집-이벤트 및 기록 스택의 정상적인 흐름을 방해하므로 플래그 설정을 피하십시오.
답변
대신 addFlags를 사용 하여 달성 할 수 있습니다.setFlags
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
설명서 에 따르면 다음과 같습니다.
의도에 (또는 기존 플래그 값으로) 추가 플래그를 추가하십시오.
편집하다
Alex Volovoy의 답변에서 알 수 있듯이 기록 스택을 변경하는 플래그를 사용하고 있는지 확인하십시오 .
… 이벤트 및 히스토리 스택의 정상적인 흐름을 방해하므로 플래그를 설정하지 마십시오.
답변
사용하는 대신 (getApplicationContext)
사용YourActivity.this
답변
아래와 같이 create chooser를 사용하여 오류가 발생한 경우 :
Intent sharingIntent = new Intent(Intent.ACTION_VIEW);
sharingIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sharingIntent.setData(Uri.parse("http://google.com"));
startActivity(Intent.createChooser(sharingIntent, "Open With"));
다음과 같이 선택기를 작성하도록 플래그를 설정하십시오.
Intent sharingIntent = new Intent(Intent.ACTION_VIEW);
sharingIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sharingIntent.setData(Uri.parse("http://google.com"));
Intent chooserIntent = Intent.createChooser(sharingIntent, "Open With");
chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(chooserIntent);
답변
또한 : fragment의 listview에 링크를 표시하는 경우 다음 과 같이 만들지 마십시오
adapter = new ListAdapter(getActivity().getApplicationContext(),mStrings);
대신에 전화
adapter = new ListAdapter(getActivity(),mStrings);
어댑터는 두 경우 모두 잘 작동하지만 링크는 마지막 경우에만 작동합니다.
답변
아마도 잘못된 위치에 OnClickListener를 구현하고 있다고 생각합니다. 보통 Activity에서 OnItemClickListener를 구현하고 대신 ListView에 설정해야합니다. 그렇지 않으면 이벤트에 문제가 발생합니다 …
답변
CustomAdapter mAdapter = new CustomAdapter( getApplicationContext(), yourlist);
또는
Context mContext = getAppliactionContext();
CustomAdapter mAdapter = new CustomAdapter( mContext, yourlist);
아래로 변경
CustomAdapter mAdapter = new CustomAdapter( this, yourlist);