繁体   English   中英

Android - 显示碎片的问题

[英]Android - Issue With Displaying Fragments

我只是无法让片段显示......! 我知道这是我的onCreateView的一个问题。 有没有人可能会看到这个问题,可以想到某种解决方案?

第一个片段实际显示,如果我注释掉第34-59行,它以super.onCreate(savedInstanceState); 使用onCreateView ,以结束});结束}); 对于confirmButton.setOnClickListener 但是,如果这些行被注释掉,则单击其他片段的选项卡会导致应用程序崩溃。 我也无法通过这样做来保存我想要从第一个片段中检索的信息......所以我确实需要这些行。

我真诚地感谢所有和任何帮助,非常感谢您的时间!

public class LyricEditorFragment extends Fragment {
private EditText mTitleText;
private EditText mBodyText;
private Long mRowId;
private LyricsDbAdapter mDbHelper;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View view = inflater.inflate(R.layout.activity_lyriceditor, container, false);
    super.onCreate(savedInstanceState);
    mDbHelper = new LyricsDbAdapter(getActivity());
    mDbHelper.open();

    mTitleText = (EditText) getView().findViewById(R.id.title);
    mBodyText = (EditText) getView().findViewById(R.id.body);

    Button confirmButton = (Button) getView().findViewById(R.id.confirm);

    mRowId = (savedInstanceState == null) ? null :
        (Long) savedInstanceState.getSerializable(LyricsDbAdapter.KEY_ROWID);
    if (mRowId == null) {
        Bundle extras = getActivity().getIntent().getExtras();
        mRowId = extras != null ? extras.getLong(LyricsDbAdapter.KEY_ROWID)
                                : null;
    }

    populateFields();

    confirmButton.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            getActivity().setResult(Activity.RESULT_OK);
            getActivity().finish();
        }
    });
    return view;
}

private void populateFields() {
    if (mRowId != null) {
        Cursor lyric = mDbHelper.fetchLyric(mRowId);
        getActivity().startManagingCursor(lyric);
        mTitleText.setText(lyric.getString(
                lyric.getColumnIndexOrThrow(LyricsDbAdapter.KEY_TITLE)));
        mBodyText.setText(lyric.getString(
                lyric.getColumnIndexOrThrow(LyricsDbAdapter.KEY_BODY)));
    }
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    saveState();
    outState.putSerializable(LyricsDbAdapter.KEY_ROWID, mRowId);
}

@Override
public void onPause() {
    super.onPause();
    saveState();
}

@Override
public void onResume() {
    super.onResume();
    populateFields();
}

private void saveState() {
    String title = mTitleText.getText().toString();
    String body = mBodyText.getText().toString();

    if (mRowId == null) {
        long id = mDbHelper.createLyric(title, body);
        if (id > 0) {
            mRowId = id;
        }
    } else {
        mDbHelper.updateLyric(mRowId, title, body);
    }
}
}

这是我的logcat图片:

logcat的

getView()函数你的using将返回null,因为片段还没有设置它的视图(它是你返回视图后实际做的)。 相反,您需要使用view.findViewById()并搜索刚刚膨胀的视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM