Re: [问题] recyclerView怎么控制外部layout

楼主: lihohsin (新)   2021-07-22 14:10:45
是想要这样
但是 MainActivity 已经extends ....
java不能多重继承
....
想说用interface
在adapter.java 加上
public interface DataChange
{
public void callFunction();
}
并在Activity实做
@Override
public void callFunction() {
}
那在adapter.java
@Override
public void onBindViewHolder(@NonNull MyCartAdapter.ViewHolder holder,
int position) {
holder.xxx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
这里要如何呼叫interface中的callFunction???
}
});
}
});
}
※ 引述《lazior (懒人)》之铭言:
: 你的意思应该是recyclerView里面的item做了某事后,会改变Activity里的某元件吧?
: 一开始还以为你是要去侦测recyclerView的状态侦测(滚动中、闲置...)
: 我不知道这样的写法好不好,但你参考看看
: 作法是在Adapter定义一个function,并在onBindViewHolder的地方呼叫这个functoin
: 之后在Activity new这个Adapter时,复写这个function
: SomeAdapter:
: @Override
: public void onBindViewHolder(@NonNull MyCartAdapter.ViewHolder holder,
: int position) {
: holder.xxx.setOnClickListener(new View.OnClickListener() {
: @Override
: public void onClick(View v) {
: clickFunction();
: }
: });
: }
: public void clickFunction() {}
: MainActivity:
: public class MainActivity extends ... {
: private TextView textView;
: @Override
: protected void onCreate(Bundle savedInstanceState) {
: ...
: SomeAdapter adapter = new Adapter(...) {
: // 复写SomeAdapter里的clickFunction
: @Override
: public void clickFunction() {
: // do something you want here
: // 清空textView
: textView.setText("");
: }
: };
: }
: }
作者: now99 (陈在天)   2021-07-22 19:27:00
new Adapter()带进去
作者: lazior (懒人)   2021-07-22 19:35:00
这样的话nash大的方法比较合乎你的意思
作者: aiweisen (艾维森)   2021-07-22 22:39:00
在activity中设一个callback object去实现你的interface,然后在new adapter的时候设把callback object丢进去adapter里面当全域变量,最后就是adapter中的item click触发时,透过传入的callback object回call 你的interface
作者: brandonron (假嗨)   2021-07-24 01:16:00
除非你要自定义参数的interface,不然就跟二楼说的一样。另外,是我就不会在activity把interface 用成全域方式实作,而是在adapter 中设置setter方式像参数方法,在使用者使用这个setter function在实作需要的参数,毕竟这功能是非必要性。

Links booklink

Contact Us: admin [ a t ] ucptt.com