这个问题的核心是如何将一个 MatrixCursor 的数据从一个活动发送到一个片段。
我正在我的活动中执行搜索功能,并返回一个片段,其中包含一个列表,该列表将填充来自查询响应的数据,即矩阵光标。
到目前为止,Bundle 和 parcelable 对我来说并不适用。任何提示或指导?
这个问题的核心是如何将一个 MatrixCursor 的数据从一个活动发送到一个片段。
我正在我的活动中执行搜索功能,并返回一个片段,其中包含一个列表,该列表将填充来自查询响应的数据,即矩阵光标。
到目前为止,Bundle 和 parcelable 对我来说并不适用。任何提示或指导?
使界面可搜索
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()
}
只要不重新创建活动,这将持续存在。
我看到了三个潜在的选择。
尝试Gson。您可以将实例转换为 String 以传递它,然后从 String 数据中重新实例化它。然而,这并不适用于所有事情。
在您的 Fragment 中创建一个新方法。您不打算在构造函数中传递自定义参数,但您可以稍后传递它:
private MatrixCursor cursor;
public void setCursor(MatrixCursor cursor) {
this.cursor = cursor;
}
由于它是同一个实例,因此对 Fragment 中的实例所做的更改将反映在您的 Activity 中。但是,如果您旋转设备或导致其他配置更改,这将导致问题。要解决此问题,请将以下内容添加到<activity>
清单中的属性中:
android:configChanges="orientation|keyboardHidden"
片段保留对其父 Activity 的引用。您可以将辅助方法添加到您的 Activity 中,这些方法基本上代理了您从 MatrixCursor 实例中需要的方法:
public void addRow(Object[] columnValues) {
cursor.addrow(columnValues);
}
//etc
然后,在您的 Fragment 中,您可以执行以下操作:
((MyActivityClass) getActivity()).addRow(columnValues);
选项 3 可能是最好的选择,因为它不依赖于可能不起作用的东西或基本上是黑客的东西。