gpt4 book ai didi

java - 无法解析方法'show(android.support.v4.app.FragmentManager, java.lang.String)

转载 作者:IT老高 更新时间:2023-10-28 20:47:24 27 4
gpt4 key购买 nike

由于某种原因,当我尝试显示对话框时,我从 dialog.show(fm, DIALOG_DATE); 收到错误消息。说无法解析方法'show(android.support.v4.app.FragmentManager, java.lang.String)'

为什么不能解析方法?

mDateButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
FragmentManager fm = getActivity().getSupportFragmentManager();
DatePickerFragment dialog = new DatePickerFragment();
dialog.show(fm, DIALOG_DATE);
}
});

这是我类的其余部分:

package com.bignerdranch.android.criminalintent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;

import java.util.UUID;


public class CrimeFragment extends Fragment {
//key for the extra
public static final String EXTRA_CRIME_ID = "com.bignerdranch.android.criminalintent.crime_id";

private static final String DIALOG_DATE = "date";

//holds crime
private Crime mCrime;

//widgets
private EditText mTitleField;
private Button mDateButton;
private CheckBox mSolvedCheckBox;

//at start of build
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//get crime from crime class

/*Intents
*There are two ways a fragment can access data in its activity's intent:
* an easy direct shortcut
* or a complex flexible implementation
* First try out the shortcut
* in the shortcut, CrimeFragment will access CrimeActivity's intent directly
*/

//retrieve the extra from CrimeActivity's intent and use it to fetch the Crime
//UUID crimeId = (UUID)getActivity().getIntent().getSerializableExtra (EXTRA_CRIME_ID); //shortcut removed in chapter 10 and "should feel warm and fuzzy inside for maintaining CrimeFragments Independence"
//
UUID crimeId = (UUID)getArguments().getSerializable(EXTRA_CRIME_ID);
//CrimeLab.get() requires a context object, so CrimeFragment passes the CrimeActivity
mCrime = CrimeLab.get(getActivity()).getCrime(crimeId);

}

//Create the view and inflate the layout
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for crime Fragment
//pass false because view will be added in the activitys code
View v = inflater.inflate(R.layout.fragment_crime, container, false);

//gets crime_title from fragment_crime.xml
mTitleField = (EditText)v.findViewById(R.id.crime_title);
mTitleField.setText(mCrime.getTitle());
mTitleField.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//not used
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
mCrime.setTitle(s.toString());
}

@Override
public void afterTextChanged(Editable s) {
//also not used
}
});


//find date button from fragment_crime
mDateButton = (Button)v.findViewById(R.id.crime_date);
//set mDateButton text to current date and time
mDateButton.setText(mCrime.getDate().toString());
//disable button for now...enabled in chapter 12
// mDateButton.setEnabled(false);


mDateButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
FragmentManager fm = getActivity().getSupportFragmentManager();
DatePickerFragment dialog = new DatePickerFragment();
dialog.show(fm, DIALOG_DATE);
}
});




//find solved checkbox from fragment_crime
mSolvedCheckBox = (CheckBox)v.findViewById(R.id.crime_solved);
mSolvedCheckBox.setChecked(mCrime.isSolved());
//user clicks solved check box
mSolvedCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
//set the crime's solved property
mCrime.setSolved(isChecked);
}
});
//returns the view
return v;
}

/*The downside to direct retrieval
*can not encapsulate fragment
* CrimeFragment is no longer a reusable building block because it expects that it will always be hosted by an activity whose intent defines extra named "EXTRA_CRIME_ID"
* CrimeFragment cannot be used with just any activity
*
*/

/*Fragment Arguments
*A better solution is to stash the mCrimeId someplace that belongs to CrimeFragment rather than keeping it in CrimeActivity's personal space
* this someplace can be an arguments bundle
* Every fragment instance can have a Bundle object attached to it
* bundle contains key value pairs that work just like the intent extras of an activity
* Pg. 195
*/

/*attaching arguments to a fragment
*Attaching args to frags must be done after the frag is created but before it is added to the activity
* To hit this window use a static class called newInstance()
* This method creates the fragment instance and bundles up and sets its arguments
*/
//for attaching arguments to a fragment
public static CrimeFragment newInstance(UUID crimeId){
Bundle args = new Bundle();
args.putSerializable(EXTRA_CRIME_ID, crimeId);

CrimeFragment fragment = new CrimeFragment();
fragment.setArguments(args);

//pass UUID from extra
return fragment;
}

}

最佳答案

要解决这个问题,如果您使用的是 android.app.DialogFragment,请使用 getFragmentManager() :

mDateButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
FragmentManager fm = getActivity().getFragmentManager();
DatePickerFragment dialog = new DatePickerFragment();
dialog.show(fm, DIALOG_DATE);
}
});

使用 getSupportFragmentManager() ,必须扩展自:android.support.v4.app.DialogFragment

检查您的导入:

import android.support.v4.app.DialogFragment;

关于java - 无法解析方法'show(android.support.v4.app.FragmentManager, java.lang.String),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27514338/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com