无法从适配器调用活动函数



我想从Adapter调用活动函数。我正在尝试这样的东西:

((MainActivity)mCtx).SampleVoid(); 

但我得到了错误:java.lang.ClassCastException:android.app.Application无法转换为

public void SampleVoid(){
Toast.makeText(this,"Testowa metoda",Toast.LENGTH_LONG).show();
}

发生此错误是因为您正试图将应用程序上下文强制转换为活动上下文。首先,我不建议您在适配器中发送和存储上下文。我建议您创建一个接口,以便在适配器执行特定操作时与"活动"进行通信。例如:

活动代码:

SomeAdapter adapter = new SomeAdapter();
adapter.setOnAdapterActionListener(new OnAdapterActionListener() {
@Override
public void onSomeAdapterAction() {
Toast.makeText(this,"Testowa metoda",Toast.LENGTH_LONG).show();
}
});

适配器代码:

public class SomeAdapter extends ArrayAdapter<String> { // extend from the same adapter that you are extending now.
private OnAdapterActionListener onAdapterActionListener;
public SomeAdapter(@NonNull Context context, int resource, @NonNull List<String> objects) {
super(context, resource, objects);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View view = super.getView(position, convertView, parent);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(onAdapterActionListener != null) {
onAdapterActionListener.onSomeAdapterAction();
}
}
});
return view;
}
public void setOnAdapterActionListener(OnAdapterActionListener onAdapterActionListener) {
this.onAdapterActionListener = onAdapterActionListener;
}
}
interface OnAdapterActionListener {
void onSomeAdapterAction();
}

您可以通过Adapter构造函数传递活动。一般情况下,你可以通过接口来完成

public class MainActivity extends AppCompatActivity implements MAdapter.Listener {
private MAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAdapter = new MAdapter(this);
}
@Override
public void onClick(int position) { }
}

然后

public class MAdapter {
private Listener listener;
MAdapter(Listener listener){
this.listener = listener;
}
interface Listener {
void onClick(int position);
}
}

最新更新