54

है मैं निम्न त्रुटि हो रही है: "विधि getSupportFragmentManager() प्रकार के लिए अपरिभाषित है नई View.OnClickListener() {}" मेरी टुकड़ा नीचे दिखाया गया फ़ाइल में।getSupportFragmentManager() अपरिभाषित

मेरे पास एबीएस के माध्यम से संदर्भित संगतता पुस्तकालय और जगह पर उचित आयात है। मैंने एबीएस लाइब्रेरी w/संगतता लाइब्रेरी को पुनर्स्थापित किया, प्रोजेक्ट को साफ किया, ग्रहण को पुनरारंभ किया, लेकिन कुछ भी काम नहीं किया है।

अनिवार्य रूप से, मैं एक संवाद खंड के माध्यम से एक दिनांक पिकर दिखाने के लिए टुकड़ा प्राप्त करने की कोशिश कर रहा हूं। एक बार तिथि चुनने के बाद, इसे टुकड़े में वापस किया जाना चाहिए ताकि इसका उपयोग उस तारीख के आधार पर जानकारी की गणना के लिए किया जा सके।

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; 
} 

} 

यहाँ संवाद टुकड़ा के लिए कोड है::

यहाँ मेरी टुकड़ा के लिए कोड है

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:[email protected]")); 
     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 

} 
+0

@tony gil आप इसके बजाय [AppCompatActivity] (https://developer.android.com/reference/android/support/v7/app/AppCompatActivity.html) का उपयोग कर सकते हैं। –

+0

वहाँ एक उदारता है, कृपया इसे एक उत्तर के रूप में प्रस्तावित करें और शायद आपको पुरस्कृत किया जाएगा। :) –

+1

@tony gil क्या आपको अपना जवाब मिला? –

उत्तर

9

:

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; 
} 
} 

अंत में, यहाँ मेरी गतिविधि के लिए कोड है अपना कोड इस पर बदलने का प्रयास करें:

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; 
} 
83

आप गतिविधि संवाद का विस्तार FragmentActivity

public class ObstetricsFragment1 extends FragmentActivity{ 

इस समर्थन पुस्तकालय के लिए निहित मैं एक किया DIALOG SPECS और SUPPORT LIBRARY SPECS

+2

यह एक निराशाजनक त्रुटि है, क्योंकि आपकी कक्षा में सही आयात जोड़ने से मदद नहीं मिलती है। –

+3

बहुत निराशाजनक। जैसा कि हम पुर्तगाली में कहते हैं, "बैग में एक पैर"। –

+0

'फ्रैगमेंट एक्टिविटी' बढ़ाने में असमर्थ, 'फ्रैगमेंट' का विस्तार करना चाहिए क्योंकि मैं अपने आधार के रूप में 'नेविगेशन ड्रॉवर' खंड का उपयोग कर रहा हूं। किसी को भी कामकाज पता है? – Azurespot

4

के रूप में देखा है, कहता है कि बनाकर इस समस्या से छुटकारा मिल जाएगा मार्को के जवाब पर diff देखने के लिए क्या वह वास्तव में बदल रहा है की सिफारिश की: बस

d.show(getSupportFragmentManager(), "dialog"); 

FragmentManager fm = 
    ObstetricsFragment1.this.getSherlockActivity().getSupportFragmentManager(); 
d.show(fm, "dialog"); 
1

आपको SherlockDialogFragment से ObstetricsFragment1 को विस्तारित करने की आवश्यकता है।

2

मुझे एक पाठ परियोजना लोड करने में एक समान समस्या थी (https://developer.android.com/training/multiple-threads)।

हल करने के लिए, मुझे बाहरी जार (एसडीके/एक्स्ट्रा/एंड्रॉइड/सपोर्ट/वी 4/एंड्रॉइड-सपोर्ट-वी 4.जर) जोड़ना पड़ा।

उम्मीद है कि इससे मदद मिलती है।

3

यदि कोई SherlockFragment के बजाय SherlockActivity का उपयोग कर रहा है तो गतिविधि को SherlockFragmentActivity पर बढ़ाएं।

0

FragmentManager को एक खंड कॉल getChildFragmentManager() में प्राप्त करने के लिए। देखें this.

बदलें इस

mPickLMPDate.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     LMPDatePickerDialogFragment d = LMPDatePickerDialogFragment.newInstance(); 
     d.show(getSupportFragmentManager(), "dialog"); 
    } 

}); 

mPickLMPDate.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     LMPDatePickerDialogFragment d = LMPDatePickerDialogFragment.newInstance(); 
     d.show(getChildFragmentManager(), "dialog"); 
    } 

}); 
+1

कृपया विस्तार करें। कुछ नमूना कोड भी अच्छा हो सकता है। टी.के.एस! –

+0

'FragmentActivity.getSupportFragmentManager() '=' android.support.v4.app.Fragment.getFragmentManager() 'इस मामले में। इसके लिए आपको घोंसला वाले टुकड़ों की आवश्यकता नहीं है। –

-1

को वहाँ अपनी परियोजना में एक समस्या है क्योंकि आप ActionBarSherlock जिसका बहिष्कार किया जाता है का उपयोग कर रहे हैं ... आप पर एक नज़र रखना चाहिए Android Support और इसका उपयोग करें क्योंकि supportFragmentManager इसके साथ उपलब्ध है। यह इसका इस्तेमाल अपने build.gradle में जोड़

compile "com.android.support:support-core-utils:25.2.0" 

सिर्फ समर्थन से FragmentActivity या टुकड़ा के साथ अपनी गतिविधियों और टुकड़ा फैली बाद करने के लिए बहुत आसान है। शायद तुम क्योंकि शर्लक बार

अपनी समस्या के बारे में एक और बात यह है कि आप एक टुकड़ा से supportFragmentManager कहा जाता है का उपयोग कर के कुछ परिवर्तन करना होगा ... आप बुलाया जाना चाहिए

getChildFragmentManager() // because it will be a nested fragment 

आशा है कि यह उपयोगी है

+0

"शेरलॉक से एपकोपेट में माइग्रेट करें" एक टिप्पणी नहीं होना चाहिए। –

+0

निश्चित रूप से, लेकिन यह बताने के लिए प्रासंगिक है, इसके अलावा, मेरा जवाब फ्रेगमेंट एक्टिविटी का उपयोग करने के लिए तथ्यों पर ध्यान केंद्रित करता है और getChildFragmentManager() –

+0

हां लेकिन ओपी * को पहले से ही शेरलॉक फ्रैगमेंट का उपयोग करने के लिए पहले से ही 'फ्रैगमेंट एक्टिविटी' का उपयोग करना होगा। जो आपने याद किया वह है 'Fragment.getFragmentManager() '। आपको एक बच्चे के टुकड़े प्रबंधक और नेस्टेड टुकड़ों का उपयोग करके एक और चर लागू करने की आवश्यकता नहीं है। मूल और समर्थन टुकड़ों के पास केवल उनके प्रकार के प्रबंधक तक पहुंच है। यही कारण है कि इसे 'getSupportFragmentManager' नाम नहीं दिया गया है। –