【发布时间】:2022-01-28 07:22:17
【问题描述】:
实际上我知道如何将额外的值从活动发送到片段,但我需要将联系人光标发送到片段,然后我将该光标传递给光标适配器并在列表视图中显示数据。
【问题讨论】:
标签: android fragment android-cursor
实际上我知道如何将额外的值从活动发送到片段,但我需要将联系人光标发送到片段,然后我将该光标传递给光标适配器并在列表视图中显示数据。
【问题讨论】:
标签: android fragment android-cursor
有多种方法可以完成您正在尝试做的事情。只有其中一些要求您在创建片段之前拥有光标。
你可以创建一个方法来创建你的片段,然后传入光标:
public class YourFragment extends Fragment {
private Cursor mCursor;
public static YourFragment createYourFragmentWithCursor( Cursor cursor ) {
YourFragment fragment = new YourFragment();
fragment.setCursor( cursor );
return fragment;
}
@Override
public void onViewCreated (View view, Bundle savedInstanceState) {
ListView listView = (ListView) findViewById( R.id.yourListView );
listView.setAdapter( new CursorAdapter( getActivity(), getCursor() );
}
protected Cursor getCursor() {
return mCursor;
}
private Cursor setCursor( Cursor cursor ) {
mCursor = cursor;
}
}
您可以将游标从活动传递到它控制的片段,让活动实现一个包含返回游标的方法的接口。然后,在您的片段中,您可以获得对该接口的引用。
例如:
public interface CursorProvidingInterface {
Cursor getCursor();
}
public class YourActivity extends Activity implements CursorProvidingInterface {
...
@Override
public Cursor getCursor() {
Cursor cursor = whateverYouDoToAcquireYourCursor();
return cursor;
}
...
}
public class YourFragment extends Fragment {
private CursorProvidingInterface cursorProvidingInterface;
@Override
public void onAttach( Activity activity ) {
try {
cursorProvidingInterface = (CursorProvidingInterface) activity;
}
catch (ClassCastException e) {
throw new RuntimeException( activity.getClass().getName() + " must implement " + CursorProvidingInterface.class.getName() );
}
}
@Override
public void onViewCreated (View view, Bundle savedInstanceState) {
ListView listView = (ListView) findViewById( R.id.yourListView );
listView.setAdapter( new CursorAdapter( getActivity(), cursorProvidingInterface.getCursor() );
}
}
根据您的情况,上述策略可能不是最佳选择。
假设您的游标来自数据库,我建议您在创建片段时简单地从数据库中获取游标。如有必要,您可以将可能需要的任何查询参数作为参数传递给片段。
在这种情况下,我更喜欢使用某种形式的依赖注入,例如 RoboGuice,并创建一个 @Singleton 类来处理您的数据库事务,然后您可以 @Inject 并在需要时调用它。
您可以考虑实现ContentProvider 并使用它来获取您需要的光标。如果您从光标显示的数据可能经常更改,这可能会特别有用。
最后两种情况是在游标中传递数据的更可靠的方法,我建议您熟悉它们。搜索有关这些方法的教程将产生比我在此处提供的更好的示例。
【讨论】:
使用构造函数将值传递给片段。然后将构造函数中的值分配给实例变量。然后你可以在 onCreateView() 方法中使用 cursor 来初始化它与片段开始。
更新: 创建setter方法来设置Fragment中的Cursor,所以添加以下方法
public static setMyCursor(Cursor pCursor){
this.cursor=pCursor;
}
使用构造函数作为公共
public MyFragment(){
}
使用 setMyCursor() 方法设置光标
【讨论】: