Re: [問題] recyclerView怎麼控制外部layout

看板AndroidDev作者 (新)時間3年前 (2021/07/22 14:10), 3年前編輯推噓4(4010)
留言14則, 5人參與, 3年前最新討論串4/4 (看更多)
是想要這樣 但是 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(""); : } : }; : } : } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.34.60.240 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1626934246.A.F66.html ※ 編輯: lihohsin (114.34.60.240 臺灣), 07/22/2021 14:44:21

07/22 19:27, 3年前 , 1F
new Adapter()帶進去
07/22 19:27, 1F

07/22 19:35, 3年前 , 2F
這樣的話nash大的方法比較合乎你的意思
07/22 19:35, 2F

07/22 22:39, 3年前 , 3F
在activity中設一個callback object去實現你的interfac
07/22 22:39, 3F

07/22 22:39, 3年前 , 4F
e,然後在new adapter的時候設把callback object丟進去
07/22 22:39, 4F

07/22 22:39, 3年前 , 5F
adapter裡面當全域變數,最後就是adapter中的item clic
07/22 22:39, 5F

07/22 22:39, 3年前 , 6F
k觸發時,透過傳入的callback object回call 你的interf
07/22 22:39, 6F

07/22 22:39, 3年前 , 7F
ace
07/22 22:39, 7F

07/24 01:16, 3年前 , 8F
除非你要自定義參數的interface,不然就跟二樓說的一
07/24 01:16, 8F

07/24 01:16, 3年前 , 9F
樣。另外,是我就不會在activity把interface 用成全
07/24 01:16, 9F

07/24 01:16, 3年前 , 10F
域方式實作,而是在adapter 中設置setter方式像參數
07/24 01:16, 10F

07/24 01:16, 3年前 , 11F
方法,在使用者使用這個setter function在實作需要的
07/24 01:16, 11F

07/24 01:16, 3年前 , 12F
參數,畢竟這功能是非必要性。
07/24 01:16, 12F

07/26 04:08, 3年前 , 13F
原po應該是沒理解new的時候可以直接複寫而已
07/26 04:08, 13F

07/26 04:08, 3年前 , 14F
我覺得兩個方法都很好,端看原po自己的需求
07/26 04:08, 14F
文章代碼(AID): #1W-Glczc (AndroidDev)
文章代碼(AID): #1W-Glczc (AndroidDev)