首頁 >Java >java教程 >如何實作Fragment和自訂遊標適配器之間的通訊?

如何實作Fragment和自訂遊標適配器之間的通訊?

Patricia Arquette
Patricia Arquette原創
2024-11-16 07:29:02426瀏覽

How to Implement Communication Between a Fragment and a Custom Cursor Adapter?

連接片段和適配器

簡介
在片段和自訂遊標適配器之間創建通訊通道可以促進數據無縫交換以及這些組件之間的事件處理。

問題
片段包含與遊標適配器關聯的 ListView。此適配器在每個清單行中都有一個帶有 onClick 偵聽器的按鈕。目標是在按下此按鈕時通知片段。

解決方案

  1. 在適配器中定義介面:

    • 在適配器中類別中使用方法buttonPressed()建立AdapterInterface。
  2. 在Fragment中實作介面

    :
    • 在fragment類別中,實作AdapterInterface>
  3. 在fragment類別中,實作AdapterInterface並重寫buttonPressed() 。
    • 將Fragment傳遞為適配器的參數
    • 向接受 AdapterInterface 物件的轉接器類別。
  4. 實例化適配器時,傳遞片段(實作 AdapterInterface)作為參數。
    • 從適配器的OnClickListener 呼叫介面
    • :
    • 在適配器的bindView(監聽器。
  5. 在監聽器內,呼叫傳入片段的 buttonPressed() 方法。

public class MyListAdapter extends CursorAdapter {

    public interface AdapterInterface {
        public void buttonPressed();
    }

    private AdapterInterface buttonListener;

    public MyListAdapter (Context context, Cursor c, int flags, AdapterInterface buttonListener) {
        super(context,c,flags);
        this.buttonListener = buttonListener;
    }

    @Override
    public void bindView(final View view, final Context context, final Cursor cursor) {
        ViewHolder holder = (ViewHolder) view.getTag();

        ...

        holder.button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                buttonListener.buttonPressed();
            }
        });
    }
}

public MyListFragment extends Fragment implements AdapterInterface {

    @Override
    public void buttonPressed() {
        // some action
    }
}
範例程式碼
    :
    • 用法
    • :

      MyListAdapter adapter = new MyListAdapter (getActivity(), myCursor, myFlags, this);
    • 建立適配器的實例,傳遞片段作為參數:
    • 注意方向變化
    • :
  1. 請注意,片段重新建立方向變更可能會導致適配器引用不存在的片段。為了防止這種情況發生,請考慮重新建立適配器。

以上是如何實作Fragment和自訂遊標適配器之間的通訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn