如何将光标从android活动发送到片段

时间:2014-01-09 06:06:12

标签: android cursor fragment

实际上我知道如何将多余的值从活动发送到片段但我需要将联系人光标发送到片段,之后我将光标传递给光标适配器并在listview中显示数据请帮助我。

2 个答案:

答案 0 :(得分:2)

有很多方法可以完成你想要做的事情。在创建片段之前,只有部分要求您拥有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并使用它来获取所需的光标。如果您从Cursor显示的数据可能经常更改,这可能会特别有用。


最后两种情况是在Cursor中传递数据的更强大的方法,我建议你熟悉它们。搜索有关这些方法的教程将会产生比我在此处提供的更好的示例。

答案 1 :(得分:1)

使用构造函数将值传递给片段。然后将值从构造函数赋值给实例变量。然后你可以使用onCreateView()方法中的游标来初始化它,并开始片段化。

更新: 创建用于在片段中设置Cursor的setter方法,因此添加以下方法

   public static setMyCursor(Cursor pCursor){
      this.cursor=pCursor;
   }

将构造函数用作公共

   public MyFragment(){

   }

使用setMyCursor()方法

设置光标