将数据的MatrixCursor从Activity传递到Fragment

时间:2018-10-09 17:14:39

标签: android bundle parcelable matrixcursor

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

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

到目前为止,捆绑包和包裹包对我来说还算不上。有提示或指导吗?

2 个答案:

答案 0 :(得分:0)

我看到三个潜在的选择。

  1. 尝试Gson。您可能能够将实例转换为字符串以通过它,然后从String数据重新实例化它。但是,这并不适用于所有情况。

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

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

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

    android:configChanges="orientation|keyboardHidden"
    
  3. 片段保留对其父活动的引用。您可以在Activity中添加辅助方法,这些辅助方法实际上可以代理MatrixCursor实例中所需的方法:

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

    然后,您可以在片段中执行以下操作:

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

选项3可能是最好的选择,因为它不依赖于可能无效的东西,或者根本上不是黑客。

答案 1 :(得分:0)

使界面可搜索

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()
}

只要不重新创建活动,这将一直存在。