簡體   English   中英

當我放置的方法是活動時,如何從片段活動中調用方法?

[英]How can I call a method from fragment activity when my method placed is the Activity?

當我放置的方法是活動時,如何從片段活動中調用方法?

public class PosMainActivity extends AppCompatActivity {
      @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_trx);
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
         response_message = extras.getString("RESPONSE_MESSAGE");

    }

    //Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    //setSupportActionBar(toolbar);
    // Create the adapter that will return a fragment for each of the three
    // primary sections of the activity.
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.container);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    mViewPager.addOnPageChangeListener(new 
   TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.addOnTabSelectedListener(new 
       TabLayout.ViewPagerOnTabSelectedListener(mViewPager));
     }

   public  void parseJsonResponse(String jsonResponse){
// I parses and adds the value to the text view or button here
         try {
            JSONObject ResponseHeaderObject = new JSONObject(responseData);
            String UIHeader = ResponseHeaderObject.getString("HEADER");
            //Set Header Display
            headerTextView =(TextView) findViewById(R.id.headerTextView);
            headerTextView.setText(UIHeader);

        }catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

 }

     /**
     * A placeholder fragment containing a simple view.
     */
       public static class PlaceholderFragment extends Fragment {
    @Override
    public void onViewCreated(View v, Bundle savedInstanceState) {
         super.onViewCreated(v, savedInstanceState);
         parseJsonResponse(response_message);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        TextView textView = (TextView) rootView.findViewById(R.id.section_label);
        textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER)));

        //Switch to different layout accordingly
        switch (getArguments().getInt(ARG_SECTION_NUMBER))
        {
            case 1: {
                rootView = inflater.inflate(R.layout.fragment_main, container, false);
                break;
            }
            case 2: {
                rootView = inflater.inflate(R.layout.fragment_receipt, container, false);
                break;
            }


        }
        return rootView;
      }
   }
}

當我將parseJsonResponse放在onViewCreated()方法中時,出現以下錯誤:

非靜態字段不能從靜態上下文android引用

parseJsonResponse()在我的Activity類中,並且我無法將其更改為靜態方法。

在這種情況下我能做什么?

解:

從片段調用Activity的方法

 ((YourActivityName)getActivity()).addUserLineInfoFragment();

注意:這可能會導致某些東西泄漏。 因此,

從Activity調用片段的方法

1.創建界面

 public interface OnButtonListener
    {
        void onButtonClick();
    }

2.初始化活動

 protected OnButtonListener onActionButtonListener;

    public void setOnButtonListener(OnButtonListener actionButtonListener)
    {
        this.onActionButtonListener = actionButtonListener;
    }

3.在活動中,在需要執行此操作時單擊事件

this.onActionButtonListener.onButtonClick();

4.在片段中實現偵聽器(OnButtonListener)

 @Override
    public void onButtonClick(){}

5.在片段onCreateView

((YourActivityName) getActivity()).setOnButtonListener(this);

資料來源: 請參閱此

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM