어댑터에서 활동을 시작하는 방법은 무엇입니까?
사용자 지정 어댑터가있는 ListActivity가 있습니다. 각 뷰 내부에는 OnClickListener를 구현해야하는 몇 가지 버튼이있을 수 있습니다. 어댑터에서 OnClickListener를 구현해야합니다. 그러나 startActivity () 또는 setResult ()와 같은 함수를 호출하는 방법을 모르겠습니다. 어댑터가 활동으로 확장되지 않기 때문입니다.
그래서이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 감사
현재 컨텍스트를 Adapter 생성자에 전달하고 필드로 저장하기 만하면됩니다. 그런 다음 onClick 내에서 해당 컨텍스트를 사용하여 startActivity ()를 호출 할 수 있습니다.
의사 코드
public class MyAdapter extends Adapter {
private Context context;
public MyAdapter(Context context) {
this.context = context;
}
public View getView(...){
View v;
v.setOnClickListener(new OnClickListener() {
void onClick() {
context.startActivity(...);
}
});
}
}
을 구현할 때 onClickListener
, 당신은 사용할 수 있습니다 v.getContext.startActivity
.
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
v.getContext().startActivity(PUT_YOUR_INTENT_HERE);
}
});
public class MyAdapter extends Adapter {
private Context context;
public MyAdapter(Context context) {
this.context = context;
}
public View getView(...){
View v;
v.setOnClickListener(new OnClickListener() {
void onClick() {
Intent intent= new Intent(context, goto.class);
intent.putextra("your_extra","your_class_value");
context.startActivity(intent);
}
});
}
}
최신 버전의 sdk의 경우 플래그 활동 작업을 설정해야합니다.
public void onClick(View v)
{
Intent myactivity = new Intent(context.getApplicationContext(), OtherActivity.class);
myactivity.addFlags(FLAG_ACTIVITY_NEW_TASK);
context.getApplicationContext().startActivity(myactivity);
}
어댑터에서 활동으로의 콜백은 인터페이스 형식의 리스너 등록을 사용하여 수행 할 수 있습니다. 인터페이스 만들기 :
public MyInterface{
public void yourmethod(//incase needs parameters );
}
In Adapter Let's Say MyAdapter:
public MyAdapter extends BaseAdapter{
private MyInterface listener;
MyAdapter(Context context){
try {
this. listener = (( MyInterface ) context);
} catch (ClassCastException e) {
throw new ClassCastException("Activity must implement MyInterface");
}
//do this where u need to fire listener l
try {
listener . yourmethod ();
} catch (ClassCastException exception) {
// do something
}
In Activity Implement your method:
MyActivity extends AppCompatActivity implements MyInterface{
yourmethod(){
//do whatever you want
}
}
If you want to redirect on url instead of activity from your adapter class then pass context of with startactivity.
btnInstall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(Intent.ACTION_VIEW, Uri.parse(link));
intent.setData(Uri.parse(link));
context.startActivity(intent);
}
});
Simple way to start activity in Adopter's button onClickListener:
Intent myIntent = new Intent(view.getContext(),Event_Member_list.class); myIntent.putExtra("intVariableName", eventsList.get(position).getEvent_id());
view.getContext().startActivity(myIntent);
참고URL : https://stackoverflow.com/questions/4197135/how-to-start-activity-in-adapter
'Development Tip' 카테고리의 다른 글
Does this function have explicit return values on all control paths? (0) | 2020.11.25 |
---|---|
개발자가 알아야 할 유용한 비트 연산자 코드 트릭은 무엇입니까? (0) | 2020.11.25 |
preg_match를 사용하여 YouTube 동영상 ID 구문 분석 (0) | 2020.11.25 |
import sun.misc.BASE64Encoder 결과 Eclipse에서 컴파일 오류 발생 (0) | 2020.11.25 |
g ++ 컴파일 시간을 단축하는 방법 (많은 템플릿을 사용할 때) (0) | 2020.11.24 |