0

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

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

到目前为止,Bundle 和 parcelable 对我来说并不适用。任何提示或指导?

4

2 回答 2

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

只要不重新创建活动,这将持续存在。

于 2018-10-09T17:28:32.283 回答
0

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

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

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

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

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

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

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

    然后,在您的 Fragment 中,您可以执行以下操作:

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

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

于 2018-10-09T17:25:09.930 回答