2014-02-17 70 views
2

我可以從片段中調用片段活動嗎?從片段調用FragmentActivity

如果我可以打電話,該怎麼辦?

否則,我該如何解決這個問題?

在我的代碼中,我想從「FragmentMain」片段調用FragmentWizard.class,但是這不會編譯。

下面是我的代碼:

public class FragmentMain extends Fragment { 
TextView textView; 
Button x; 

public FragmentMain() { 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_main, null); 

    textView = (TextView) view.findViewById(R.id.fragment_main_textview); 
    x = (Button) view.findViewById(R.id.deneme); 
    x.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent firstpage= new Intent(getActivity(),FragmentWizard.class); 
      startActivity(firstpage); 
     } 
    }); 


    return view; 
} 
} 

FragmentWizard.java

public class FragmentWizard extends FragmentActivity implements 
    PageFragmentCallbacks, ReviewFragment.Callbacks, ModelCallbacks { 
private ViewPager mPager; 
private MyPagerAdapter mPagerAdapter; 

private boolean mEditingAfterReview; 

private AbstractWizardModel mWizardModel = new SandwichWizardModel(this); 

private boolean mConsumePageSelectedEvent; 

private Button mNextButton; 
private Button mPrevButton; 

private List<Page> mCurrentPageSequence; 
private StepPagerStrip mStepPagerStrip; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if (savedInstanceState != null) { 
     mWizardModel.load(savedInstanceState.getBundle("model")); 
    } 

    mWizardModel.registerListener(this); 

    mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager()); 
    mPager = (ViewPager) findViewById(R.id.pager); 
    mPager.setAdapter(mPagerAdapter); 
    mStepPagerStrip = (StepPagerStrip) findViewById(R.id.strip); 
    mStepPagerStrip 
      .setOnPageSelectedListener(new StepPagerStrip.OnPageSelectedListener() { 
       @Override 
       public void onPageStripSelected(int position) { 
        position = Math.min(mPagerAdapter.getCount() - 1, 
          position); 
        if (mPager.getCurrentItem() != position) { 
         mPager.setCurrentItem(position); 
        } 
       } 
      }); 

    mNextButton = (Button) findViewById(R.id.next_button); 
    mPrevButton = (Button) findViewById(R.id.prev_button); 

    mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
     @Override 
     public void onPageSelected(int position) { 
      mStepPagerStrip.setCurrentPage(position); 

      if (mConsumePageSelectedEvent) { 
       mConsumePageSelectedEvent = false; 
       return; 
      } 

      mEditingAfterReview = false; 
      updateBottomBar(); 
     } 
    }); 

    mNextButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (mPager.getCurrentItem() == mCurrentPageSequence.size()) { 
       DialogFragment dg = new DialogFragment() { 
        @Override 
        public Dialog onCreateDialog(Bundle savedInstanceState) { 
         return new AlertDialog.Builder(getActivity()) 
           .setMessage(R.string.submit_confirm_message) 
           .setPositiveButton(
             R.string.submit_confirm_button, 
             null) 
           .setNegativeButton(android.R.string.cancel, 
             null).create(); 
        } 
       }; 
       dg.show(getSupportFragmentManager(), "place_order_dialog"); 
      } else { 
       if (mEditingAfterReview) { 
        mPager.setCurrentItem(mPagerAdapter.getCount() - 1); 
       } else { 
        mPager.setCurrentItem(mPager.getCurrentItem() + 1); 
       } 
      } 
     } 
    }); 

    mPrevButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      mPager.setCurrentItem(mPager.getCurrentItem() - 1); 
     } 
    }); 

    onPageTreeChanged(); 
    updateBottomBar(); 
} 

@Override 
public void onPageTreeChanged() { 
    mCurrentPageSequence = mWizardModel.getCurrentPageSequence(); 
    recalculateCutOffPage(); 
    mStepPagerStrip.setPageCount(mCurrentPageSequence.size() + 1); // + 1 = 
                    // review 
                    // step 
    mPagerAdapter.notifyDataSetChanged(); 
    updateBottomBar(); 
} 

private void updateBottomBar() { 
    int position = mPager.getCurrentItem(); 
    if (position == mCurrentPageSequence.size()) { 
     mNextButton.setText(R.string.finish); 
     mNextButton.setBackgroundResource(R.drawable.finish_background); 
     mNextButton.setTextAppearance(this, R.style.TextAppearanceFinish); 
    } else { 
     mNextButton.setText(mEditingAfterReview ? R.string.review 
       : R.string.next); 
     mNextButton 
       .setBackgroundResource(R.drawable.selectable_item_background); 
     TypedValue v = new TypedValue(); 
     getTheme().resolveAttribute(android.R.attr.textAppearanceMedium, v, 
       true); 
     mNextButton.setTextAppearance(this, v.resourceId); 
     mNextButton.setEnabled(position != mPagerAdapter.getCutOffPage()); 
    } 

    mPrevButton 
      .setVisibility(position <= 0 ? View.INVISIBLE : View.VISIBLE); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    mWizardModel.unregisterListener(this); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putBundle("model", mWizardModel.save()); 
} 

@Override 
public AbstractWizardModel onGetModel() { 
    return mWizardModel; 
} 

...... 
} 
} 

回答

10

使用getActivity()方法。這將返回片段的封閉活動。

Intent firstpage= new Intent(getActivity(),FragmentWizard.class); 
getActivity().startActivity(firstpage); // You same startActivity method in fragment as well you can use any of this 

public final Activity getActivity()

+0

我在哪裏使用getActivity。 public void onClick(View v){ Intent firstpage = new Intent(getActivity(),FragmentWizard.class); startActivity(firstpage); } – user3086033

+1

在你的片段中,你想要聯繫活動的地方 – Triode

+0

我將操作設置爲按鈕點擊。我該如何設置lt? – user3086033

2

你必須使用onActivityCreated方法來使用:

在你的類,只是做:

public class FragmentMain extends Fragment { 


public FragmentMain() { 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_main,container, false); 

    return view; 
} 
} 

並且之後,使用onActivityCreated方法: 這裏是代碼:

@Override 
     public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 
    TextView textView = (TextView) getActivity().findViewById(R.id.fragment_main_textview); 
    Button x = (Button) getActivity().findViewById(R.id.deneme); 
    x.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent firstpage= new Intent(getActivity(),FragmentWizard.class); 
      getActivity().startActivity(firstpage); 
     } 
    }); 



    } 

希望這個工程.. :)

相關問題