0

好的。所以我已经获得了我的数据库的一部分(元素的名称)以显示在列表视图中。我现在希望能够选择其中一个元素并将选择传递到一个新片段中,从数据库中调用与该元素相关的其余信息(即原子序数、质量、熔点等)。如何将所选元素传递到我的新片段中。这是我目前正在尝试的:

private void selectElement(int position){

    elementFragment fragment = new elementFragment();
    fragment.loadElement(position);

    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();

}

然后让它加载与它相关的其余信息?数据库中的每个条目都有一个我希望将其加载到的特定视图,但也愿意尝试将其加载到自定义列表视图中。(在查看专辑内容时,我会寻找与 Google Music Play 应用程序相对相似的外观)

这就是我现在正在玩的东西。

    public void loadElement(int position) {
    mPosition = position;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View viewElement = inflater.inflate(R.layout.fragment_element_detail, container, false);

    Cursor c = myDB.getRow(mPosition);

    String name = DataBaseHelper.KEY_NAME;

    String[] fromFieldNames = new String[]
            {DataBaseHelper.KEY_NAME, DataBaseHelper.KEY_ATOMIC_NUMBER, DataBaseHelper.KEY_ATOMIC_WEIGHT,
            DataBaseHelper.KEY_OXIDATION, DataBaseHelper.KEY_BOILING_POINT, 
            };

    elementName = (TextView) viewElement.findViewById(R.id.nameElement);
    elementName.setText(name);

    return viewElement;
}

我继续删除了一些字段以帮助清理它。

我遇到的最后一个错误是当我在 elementFragment 中调用 Cursor 时,由于某种原因它继续失败。这是 logcat 的副本。

08-28 07:37:20.712: E/AndroidRuntime(1093): FATAL EXCEPTION: main
08-28 07:37:20.712: E/AndroidRuntime(1093): java.lang.NullPointerException
08-28 07:37:20.712: E/AndroidRuntime(1093):     at table.periodic.elementFragment.onCreateView(elementFragment.java:33)
08-28 07:37:20.712: E/AndroidRuntime(1093):     at android.app.Fragment.performCreateView(Fragment.java:1785)
08-28 07:37:20.712: E/AndroidRuntime(1093):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:887)
08-28 07:37:20.712: E/AndroidRuntime(1093):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1059)
08-28 07:37:20.712: E/AndroidRuntime(1093):     at android.app.BackStackRecord.run(BackStackRecord.java:682)
08-28 07:37:20.712: E/AndroidRuntime(1093):     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1437)
08-28 07:37:20.712: E/AndroidRuntime(1093):     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
08-28 07:37:20.712: E/AndroidRuntime(1093):     at android.os.Handler.handleCallback(Handler.java:725)
08-28 07:37:20.712: E/AndroidRuntime(1093):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-28 07:37:20.712: E/AndroidRuntime(1093):     at android.os.Looper.loop(Looper.java:158)
08-28 07:37:20.712: E/AndroidRuntime(1093):     at android.app.ActivityThread.main(ActivityThread.java:5751)
08-28 07:37:20.712: E/AndroidRuntime(1093):     at java.lang.reflect.Method.invokeNative(Native Method)
08-28 07:37:20.712: E/AndroidRuntime(1093):     at java.lang.reflect.Method.invoke(Method.java:511)
08-28 07:37:20.712: E/AndroidRuntime(1093):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1083)
08-28 07:37:20.712: E/AndroidRuntime(1093):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:850)
08-28 07:37:20.712: E/AndroidRuntime(1093):     at dalvik.system.NativeStart.main(Native Method)

elementFragment.Java:33 对应Cursor c = myDB.getRow(mPosition);于我的代码。

谢谢您的帮助。

4

1 回答 1

0

您可以在自定义 ElementFragment 中添加一个简单的 loadElement 并在创建片段后调用它:

protected void onListItemClick (ListView l, View v, int position, long id) {
    // Create fragment
    ElementFragment fragment = new ElementFragment();

    fragment.loadElement(position); // you might also want the id

    // start activity or launch fragment transition
    // then onCreateView will be probably called
    ...
}

public class ElementFragment extends Fragment {
    private int mPosition = -1;

    public void loadElement(int position) {
        mPosition = position;
    }

只需在 onCreateView 方法中获取正确的值:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View viewElement = inflater.inflate(R.layout.fragment_element_detail, container, false);

        Cursor c = myDB.getRow(mPosition);

        ...

        return viewElement;
    }
}

编辑:Fragment fragment...替换为ElementFragment fragment...

于 2013-08-27T19:55:38.720 回答