Как начать работу в адаптере?
У меня есть ListActivity с моим адаптированным адаптером. и внутри каждого из них могут быть некоторые кнопки, в которых мне нужно реализовать OnClickListener. Мне нужно реализовать OnClickListener в адаптере. Однако я не знаю, как вызвать функцию типа startActivity() или setResult(). поскольку адаптер не распространяется на Activity.
так что лучший способ решить эту проблему? спасибо
Ответы
Ответ 1
Просто перейдите в текущий контекст к конструктору адаптера и сохраните его как поле. Затем внутри 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(...);
}
});
}
}
Ответ 2
При реализации onClickListener
вы можете использовать v.getContext.startActivity
.
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
v.getContext().startActivity(PUT_YOUR_INTENT_HERE);
}
});
Ответ 3
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);
}
});
}
}
Ответ 4
Для более новых версий sdk вы должны установить задачу активности флага.
public void onClick(View v)
{
Intent myactivity = new Intent(context.getApplicationContext(), OtherActivity.class);
myactivity.addFlags(FLAG_ACTIVITY_NEW_TASK);
context.getApplicationContext().startActivity(myactivity);
}
Ответ 5
Обратный вызов от адаптера к активности может быть выполнен с помощью регистрации слушателя в виде интерфейса:
Сделайте интерфейс:
public MyInterface{
public void yourmethod(//incase needs parameters );
}
В адаптере Let 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");
}
//делаем это, когда вам нужно стрелять слушателем л
try {
listener . yourmethod ();
} catch (ClassCastException exception) {
// do something
}
In Activity Implement your method:
MyActivity extends AppCompatActivity implements MyInterface{
yourmethod(){
//do whatever you want
}
}
Ответ 6
Если вы хотите перенаправить URL-адрес вместо активности из класса адаптера, передайте контекст с 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);
}
});
Ответ 7
Простой способ начать деятельность в Adopter кнопкой onClickListener:
Intent myIntent = new Intent(view.getContext(),Event_Member_list.class); myIntent.putExtra("intVariableName", eventsList.get(position).getEvent_id());
view.getContext().startActivity(myIntent);
Ответ 8
Вы можете начать действие, используя свой контекст следующим образом: context.startActivity(new Intent(context, TargetActivity.class));