getSupportFragmentManager ()가 정의되지 않았습니다.
다음과 같은 오류가 발생 합니다. 아래 표시된 내 조각 파일에서 "getSupportFragmentManager () 메서드가 new View.OnClickListener () {} 유형에 대해 정의되지 않았습니다 ."
ABS와 적절한 가져 오기를 통해 참조되는 호환성 라이브러리가 있습니다. 호환성 라이브러리와 함께 ABS 라이브러리를 다시 설치하고 프로젝트를 정리하고 Eclipse를 다시 시작했지만 아무것도 작동하지 않았습니다.
기본적으로 대화 조각을 통해 날짜 선택기를 표시하도록 조각을 가져 오려고합니다. 날짜가 선택되면 해당 날짜를 기반으로 정보를 계산하는 데 사용할 수 있도록 조각으로 반환되어야합니다.
내 조각의 코드는 다음과 같습니다.
package com.owentech.abstabsviewpager;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import com.actionbarsherlock.app.SherlockFragment;
public class ObstetricsFragment1 extends SherlockFragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
//Fragment Layout
View view = inflater.inflate(R.layout.obstetricsfragment1, container, false);
Button mPickLMPDate = (Button) view.findViewById(R.id.pickLMPDate);
mPickLMPDate.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
LMPDatePickerDialogFragment d = LMPDatePickerDialogFragment.newInstance();
d.show(getSupportFragmentManager(), "dialog");
}
});
return view;
}
public Dialog onCreateDialog(Bundle savedInstanceState) {
// TODO Auto-generated method stub
return null;
}
}
다음은 Dialog Fragment의 코드입니다.
package com.owentech.abstabsviewpager;
import android.app.Dialog;
import android.os.Bundle;
import android.widget.DatePicker;
import android.app.DatePickerDialog;
public class LMPDatePickerDialogFragment extends ObstetricsFragment1 implements DatePickerDialog.OnDateSetListener {
static LMPDatePickerDialogFragment newInstance() {
LMPDatePickerDialogFragment d = new LMPDatePickerDialogFragment();
return d;
}
private int mLMPYear;
private int mLMPMonth;
private int mLMPDay;
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new DatePickerDialog(getActivity(), this, mLMPYear, mLMPMonth, mLMPDay);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
mLMPYear = year;
mLMPMonth = month;
mLMPDay = day;
}
}
마지막으로 내 활동에 대한 코드는 다음과 같습니다.
package com.owentech.abstabsviewpager;
import java.util.ArrayList;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import android.widget.TextView;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.app.ActionBar.Tab;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
public class Obstetrics extends SherlockFragmentActivity
{
ViewPager mViewPager;
TabsAdapter mTabsAdapter;
TextView tabCenter;
TextView tabText;
// START Action Bar Menu Items
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) {
switch (item.getItemId()){
case R.id.menuLog:
ChangeLog cl = new ChangeLog(this);
cl.getFullLogDialog().show();
return true;
case R.id.menuEmail:
Intent emailIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:support@medicaldoctorapps.com"));
startActivity(emailIntent);
return true;
case R.id.menuRate:
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=appinventor.ai_shawn_m_gee.MedicalDoctor"));
startActivity(browserIntent);
return true;
case android.R.id.home:
// App icon in action bar clicked; go home
Intent intent = new Intent(this, Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
case R.id.menuExit:
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
//END Action Bar Menu Items
// START Tabs View Pager (Add tabs by adding mTabsAdapter.addTab)
@Override
public void onCreate(Bundle savedInstanceState)
{
// Information you want returned to your application, via onCreate(), if the activity is destroyed and restarted due to some implicit reason
super.onCreate(savedInstanceState);
mViewPager = new ViewPager(this);
mViewPager.setId(R.id.pager);
setContentView(mViewPager);
ActionBar bar = getSupportActionBar();
bar.setDisplayHomeAsUpEnabled(true);
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mTabsAdapter = new TabsAdapter(this, mViewPager);
mTabsAdapter.addTab(
bar.newTab().setText("Wheel"),
ObstetricsFragment1.class, null);
mTabsAdapter.addTab(
bar.newTab().setText("Physical"),
HistoryPhysicalFragment2.class, null);
mTabsAdapter.addTab(
bar.newTab().setText("ROS"),
HistoryPhysicalFragment3.class, null);
mTabsAdapter.addTab(
bar.newTab().setText("CAGE"),
HistoryPhysicalFragment4.class, null);
mTabsAdapter.addTab(
bar.newTab().setText("SIGECAPS"),
HistoryPhysicalFragment5.class, null);
mTabsAdapter.addTab(
bar.newTab().setText("Glasgow"),
HistoryPhysicalFragment6.class, null);
mTabsAdapter.addTab(
bar.newTab().setText("Neuro"),
HistoryPhysicalFragment7.class, null);
mTabsAdapter.addTab(
bar.newTab().setText("Dermat"),
HistoryPhysicalFragment8.class, null);
mTabsAdapter.addTab(
bar.newTab().setText("Minicog"),
HistoryPhysicalFragment9.class, null);
}
public static class TabsAdapter extends FragmentPagerAdapter implements
ActionBar.TabListener, ViewPager.OnPageChangeListener
{
private final Context mContext;
private final ActionBar mActionBar;
private final ViewPager mViewPager;
private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
static final class TabInfo
{
private final Class<?> clss;
private final Bundle args;
TabInfo(Class<?> _class, Bundle _args)
{
clss = _class;
args = _args;
}
}
public TabsAdapter(SherlockFragmentActivity activity, ViewPager pager)
{
super(activity.getSupportFragmentManager());
mContext = activity;
mActionBar = activity.getSupportActionBar();
mViewPager = pager;
mViewPager.setAdapter(this);
mViewPager.setOnPageChangeListener(this);
}
public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args)
{
TabInfo info = new TabInfo(clss, args);
tab.setTag(info);
tab.setTabListener(this);
mTabs.add(info);
mActionBar.addTab(tab);
notifyDataSetChanged();
}
@Override
public int getCount()
{
return mTabs.size();
}
@Override
public Fragment getItem(int position)
{
TabInfo info = mTabs.get(position);
return Fragment.instantiate(mContext, info.clss.getName(),
info.args);
}
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels)
{
}
public void onPageSelected(int position)
{
mActionBar.setSelectedNavigationItem(position);
}
public void onPageScrollStateChanged(int state)
{
}
public void onTabSelected(Tab tab, FragmentTransaction ft)
{
Object tag = tab.getTag();
for (int i = 0; i < mTabs.size(); i++)
{
if (mTabs.get(i) == tag)
{
mViewPager.setCurrentItem(i);
}
}
}
public void onTabUnselected(Tab tab, FragmentTransaction ft)
{
}
public void onTabReselected(Tab tab, FragmentTransaction ft)
{
}
}
// END Tabs View Pager
}
you will get rid of this problem by making the activity that calls the dialog extend FragmentActivity
public class ObstetricsFragment1 extends FragmentActivity{
this is inherent to the support library, as seen in DIALOG SPECS and SUPPORT LIBRARY SPECS
Try changing your code to this:
public class ObstetricsFragment1 extends SherlockFragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
//Fragment Layout
View view = inflater.inflate(R.layout.obstetricsfragment1, container, false);
Button mPickLMPDate = (Button) view.findViewById(R.id.pickLMPDate);
mPickLMPDate.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
LMPDatePickerDialogFragment d = LMPDatePickerDialogFragment.newInstance();
FragmentManager fm = ObstetricsFragment1.this.getSherlockActivity().getSupportFragmentManager();
d.show(fm, "dialog");
}
});
return view;
}
I did a diff on Marco's answer to see what he actually recommended changing: just
d.show(getSupportFragmentManager(), "dialog");
to
FragmentManager fm =
ObstetricsFragment1.this.getSherlockActivity().getSupportFragmentManager();
d.show(fm, "dialog");
In case anyone is using SherlockActivity
instead of SherlockFragment
just extend the activity to SherlockFragmentActivity
.
I had a similar problem loading a lesson project (https://developer.android.com/training/multiple-threads).
To resolve, I had to add an external jar (sdk/extras/android/support/v4/android-support-v4.jar).
Hope this helps.
You need to extend ObstetricsFragment1 from SherlockDialogFragment.
To get FragmentManager
in a fragment call getChildFragmentManager()
. See this.
Change this
mPickLMPDate.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
LMPDatePickerDialogFragment d = LMPDatePickerDialogFragment.newInstance();
d.show(getSupportFragmentManager(), "dialog");
}
});
to
mPickLMPDate.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
LMPDatePickerDialogFragment d = LMPDatePickerDialogFragment.newInstance();
d.show(getChildFragmentManager(), "dialog");
}
});
There is a problem in your project because you are using the actionBarSherlock which is deprecated... You should take a look at Android Support and use it because the supportFragmentManager is available with it. It's pretty easy to use it, add it in your build.gradle
compile "com.android.support:support-core-utils:25.2.0"
After just extends your activities and fragment with FragmentActivity or Fragment from support. Maybe you will have to make some change because of using sherlock bar
Another thing about your problem is that you called supportFragmentManager from a fragment... you should called
getChildFragmentManager() // because it will be a nested fragment
Hope it's helpful
ReferenceURL : https://stackoverflow.com/questions/13212353/getsupportfragmentmanager-is-undefined
'programing' 카테고리의 다른 글
jQuery 단일 선택기 대 .find () (0) | 2021.01.14 |
---|---|
BASH에서 "CLS"와 동일합니까? (0) | 2021.01.14 |
Windows 용 Linux에서 Qt 5 빌드 (0) | 2021.01.14 |
Java 예외에 대해 가능한 한 많은 정보를 기록하는 방법은 무엇입니까? (0) | 2021.01.14 |
Pandas에서 MultiIndex 인덱스 열 값을 쿼리하는 방법 (0) | 2021.01.14 |