作者lihohsin (新)
看板AndroidDev
標題Re: [問題] recyclerView怎麼控制外部layout
時間Thu Jul 22 14:10:45 2021
是想要這樣
但是 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://webptt.com/m.aspx?n=bbs/AndroidDev/M.1626934246.A.F66.html
※ 編輯: lihohsin (114.34.60.240 臺灣), 07/22/2021 14:44:21
1F:推 now99: new Adapter()帶進去 07/22 19:27
2F:推 lazior: 這樣的話nash大的方法比較合乎你的意思 07/22 19:35
3F:推 aiweisen: 在activity中設一個callback object去實現你的interfac 07/22 22:39
4F:→ aiweisen: e,然後在new adapter的時候設把callback object丟進去 07/22 22:39
5F:→ aiweisen: adapter裡面當全域變數,最後就是adapter中的item clic 07/22 22:39
6F:→ aiweisen: k觸發時,透過傳入的callback object回call 你的interf 07/22 22:39
7F:→ aiweisen: ace 07/22 22:39
8F:→ brandonron: 除非你要自定義參數的interface,不然就跟二樓說的一 07/24 01:16
9F:→ brandonron: 樣。另外,是我就不會在activity把interface 用成全 07/24 01:16
10F:→ brandonron: 域方式實作,而是在adapter 中設置setter方式像參數 07/24 01:16
11F:→ brandonron: 方法,在使用者使用這個setter function在實作需要的 07/24 01:16
12F:→ brandonron: 參數,畢竟這功能是非必要性。 07/24 01:16
13F:推 taco2548: 原po應該是沒理解new的時候可以直接複寫而已 07/26 04:08
14F:→ taco2548: 我覺得兩個方法都很好,端看原po自己的需求 07/26 04:08