【问题标题】:Pass MatrixCursor of data from Activity to Fragment将数据的 MatrixCursor 从 Activity 传递到 Fragment
【发布时间】:2018-10-09 17:14:39
【问题描述】:

这个问题的核心是如何将一个 MatrixCursor 的数据从一个活动发送到一个片段。

我正在我的活动中执行搜索功能,并返回一个片段,其中包含一个列表,该列表将填充来自查询响应的数据,即矩阵光标。

到目前为止,Bundle 和 parcelable 对我来说并不奏效。有什么提示或指导吗?

【问题讨论】:

    标签: android bundle parcelable matrixcursor


    【解决方案1】:

    我看到了三个潜在的选择。

    1. 试试Gson。您可以将实例转换为 String 以传递它,然后从 String 数据中重新实例化它。但是,这并不适用于所有情况。

    2. 在您的 Fragment 中创建一个新方法。您不打算在构造函数中传递自定义参数,但您可以稍后传递它:

      private MatrixCursor cursor;
      
      public void setCursor(MatrixCursor cursor) {
          this.cursor = cursor;
      }
      

      由于是同一个实例,因此对 Fragment 中的实例所做的更改将反映在您的 Activity 中。但是,如果您旋转设备或导致其他配置更改,这将导致问题。要解决此问题,请将以下内容添加到 Manifest 中的 <activity> 属性:

      android:configChanges="orientation|keyboardHidden"
      
    3. 片段保留对其父 Activity 的引用。您可以将辅助方法添加到您的 Activity 中,从本质上代理您从 MatrixCursor 实例中需要的方法:

      public void addRow(Object[] columnValues) {
          cursor.addrow(columnValues);
      }
      
      //etc
      

      然后,在你的 Fragment 中,你可以这样做:

      ((MyActivityClass) getActivity()).addRow(columnValues);
      

    选项 3 可能是最好的选择,因为它不依赖于可能不起作用的东西或基本上是 hack。

    【讨论】:

      【解决方案2】:

      使界面可搜索

      public interface Searchable {
           MatrixCursor getSearchResult() 
      }
      

      确保为您的活动实现此接口。

      public MainActivity extends AppCompatActivity implements Searchable {
      
          private MatrixCursor mSearchResultMatrixCursor;
          ...
          @Override public MatrixCursor getSearchResult() {
               return mSearchResultMatrixCursor;
          }    
      }
      

      在你 Fragment 的 onCreate 或任何你想使用 MatrixCursor 的地方,

      你可以打电话,

      if(getActivity != null && getActivity instanceOf Searchable) {
               MatrixCursor matrixCursor = ((Searchable)getActivity).getSearchResult()
      }
      

      只要没有重新创建活动,这种情况就会一直存在。

      【讨论】:

        猜你喜欢
        • 2018-01-07
        • 1970-01-01
        • 1970-01-01
        • 2013-07-26
        • 1970-01-01
        • 2021-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多