MenuItemClick的MainActivity.java代码:

 mtoolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) {

               case R.id.readatnight:
                      //how to write
             }


MainActivity.java中的ViewPagerAdapter类:

private class SectionsPagerAdapter extends FragmentPagerAdapter {
    public SectionsPagerAdapter(FragmentManager fm){
        super(fm);
    }

    @Override
    public long getItemId(int positions) {
        return super.getItemId(positions);
    }

    @Override
    public Fragment getItem(int positions){
        Fragment fragment = null;
        switch (positions) {
            case 0:
                fragment = new fragment0();
                break;
        }
        return  fragment;
    }

    @Override
    public int getCount() {return 1;}
}


我的fragment0.java:

  public class fragment0 extends Fragment {
TextView mtxts;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
    return inflater.inflate(R.layout.testss, container, false);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    mtxts = (TextView) getView().findViewById(R.id.txts);
    mtxts.setText(R.string.A0101);
 }
}


我的menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
    android:id="@+id/readatnight"
    app:showAsAction="ifRoom"
    android:icon="@drawable/moonc"
    android:title="夜讀模式"/>
</menu>


我的问题是如何编写menuitemclick事件,以便更改片段的文本大小,背景颜色和文本颜色?

最佳答案

首先,在您的Fragment0类中(类应始终以大写字母开头),您需要创建一个setter方法,您可以在其中设置TextView的内容:

public void setText(String text) {
    mtxts.setText(text);
}


在您的MainActivity中,获取片段的实例并将其转换为Fragment0。在您的情况下,这应该是安全的,因为索引0总是返回Fragment0的实例,这假设您的SectionsPagerAdapter被称为mFragmentAgapter

switch (item.getItemId()) {
    case R.id.readatnight:
        Fragment0 fragment = (Fragment0) mFragmentAdapter.getItem(0);
        fragment.setText("Hello world, 晚安!");
        break;
}


并在Fragment0中添加其他设置方法,以获取文本颜色等。

不过要记住一件事,每次调用getItem(int)时,总是创建一个片段的新实例。相反,您应该保留对片段的引用,并且仅当该引用为null时才创建一个新实例。

09-15 11:45