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