这个问题的核心是如何将数据的MatrixCursor从活动发送到片段。
我正在执行自己的搜索功能,并返回一个片段,其中包含一个列表,该列表将填充来自矩阵响应光标的查询响应中的数据。
到目前为止,捆绑包和包裹包对我来说还算不上。有提示或指导吗?
答案 0 :(得分:0)
我看到三个潜在的选择。
尝试Gson。您可能能够将实例转换为字符串以通过它,然后从String数据重新实例化它。但是,这并不适用于所有情况。
在您的Fragment中创建一个新方法。您并不是要在构造函数中传递自定义参数,但可以稍后传递它:
private MatrixCursor cursor;
public void setCursor(MatrixCursor cursor) {
this.cursor = cursor;
}
由于是同一实例,因此您对“片段”中的实例所做的更改将反映在“活动”中。但是,如果您旋转设备或引起其他配置更改,这将导致问题。要解决此问题,请将以下内容添加到清单中的<activity>
属性中:
android:configChanges="orientation|keyboardHidden"
片段保留对其父活动的引用。您可以在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()
}
只要不重新创建活动,这将一直存在。