Superuser总结三

一、显示“允许”与“拒绝”的界面

①进入程序时默认加载类MainActivity,而MainActivity默认继承类BetterListActivity,在BetterListActivity的onCreate()方法中
  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        int cv = getContentView();
        if (0 != cv)
            setContentView(cv);
       
        try {
            fragment = (BetterListFragment)clazz.getConstructors()[0].newInstance();
            fragment.setArguments(getIntent().getExtras());
            fragment.getInternal().setListener(this);
            getSupportFragmentManager().beginTransaction().replace(getListContainerId(), fragment, "betterlist").commit();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
②由子类的构造方法
public MainActivity() {
  super(PolicyFragment.class);
 }

可以看出在MainAcitivity中fragement指PolicyFragment,

③ getSupportFragmentManager().beginTransaction().replace(getListContainerId(), fragment, "betterlist").commit();加载显示了PolicyFragment

二、menu菜单显示

①public abstract class FragmentInterface {
 abstract public void onCreateOptionsMenu(Menu menu, MenuInflater inflater);
}
②BetterListFragmentInternal extends FragmentInterface{
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    }
}
③public class PolicyFragment extends BetterListFragment {

    @Override
    public PolicyFragmentInternal createFragmentInterface() {
        return new PolicyFragmentInternal(this);
    }

}

④public class MainActivity extends BetterListActivity {
@Override
 public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater mi = new MenuInflater(this);
  mi.inflate(R.menu.app, menu);
  MenuItem about = menu.findItem(R.id.about);
  about.setOnMenuItemClickListener(new OnMenuItemClickListener() {
   @Override
   public boolean onMenuItemClick(MenuItem item) {
    getFragment().setContent(new AboutFragment(), true,getString(R.string.about));
    return true;
   }
  });

  return super.onCreateOptionsMenu(menu);
 }
}

⑤在类SupportFragment中,调用了internal.onCreateOptionsMenu(menu, inflater)方法,由③可知在显示PolicyFragment时调用的是PolicyFragmentInternal的onCreateOptionsMenu(menu, inflater)方法
public abstract class SupportFragment<T extends FragmentInterface> extends Fragment implements FragmentInterfaceWrapper {
  @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
       
        internal.onCreateOptionsMenu(menu, inflater);
    }
}
⑥public class PolicyFragmentInternal extends ListContentFragmentInternal {
  @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        MenuInflater mi = new MenuInflater(getActivity());
        mi.inflate(R.menu.main, menu);
        MenuItem log = menu.findItem(R.id.logs);
 //log日志界面
        log.setOnMenuItemClickListener(new OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                showAllLogs();
                return true;
            }
        });
       
 //设置
        MenuItem settings = menu.findItem(R.id.settings);
        settings.setOnMenuItemClickListener(new OnMenuItemClickListener() {
            void openSettingsNative(final MenuItem item) {
                setContent(createSettingsNativeFragment(), true, getString(R.string.settings));
            }
           
            @Override
            public boolean onMenuItemClick(final MenuItem item) {
                if (getActivity() instanceof FragmentActivity) {
                    setContent(new SettingsFragment(), true, getString(R.string.settings));//创建了设置
                }
                else {
                    openSettingsNative(item);
                }
                return true;
            }
        });
    }
}
三、关于界面的显示
④public class MainActivity extends BetterListActivity {
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater mi = new MenuInflater(this);
  mi.inflate(R.menu.app, menu);
  MenuItem about = menu.findItem(R.id.about);//创建了关于条目
  about.setOnMenuItemClickListener(new OnMenuItemClickListener() {
   @Override
   public boolean onMenuItemClick(MenuItem item) {
    getFragment().setContent(new AboutFragment(), true,getString (R.string.about));
    return true;
   }
  });

  return super.onCreateOptionsMenu(menu);//执行父类的方法,创建了log日志和设置界面
 }
}

四、日志界面的显示
① MenuItem log = menu.findItem(R.id.logs);
        log.setOnMenuItemClickListener(new OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                showAllLogs();//当点击log图标时显示log日志界面
                return true;
            }
        });
② void showAllLogs() {
        setContent(null, null);//设置要显示的内容
        getListView().clearChoices();//重置adapter的内容
    }
③ void setContent(final ListItem li, final UidPolicy up) {
 //该方法在类PolicyFragmentInternal中,getActivity()返回MainActivity,
 //继承关系为MainActivity extends BetterListActivity
 //public class BetterListActivity extends FragmentActivity
 //此时getActivity() instanceof FragmentActivity条件满足
        if (getActivity() instanceof FragmentActivity) {
 //创建了显示log日志的fragment
            LogFragment l = new LogFragment();
            l.getInternal().setUidPolicy(up);//up为null
            l.getInternal().setListContentId(getFragment().getId());
            mContent = l;
        }
        else {
            mContent = setContentNative(li, up);
        }
        //由up为null可知,下面的方法传递的参数为setContent(LogFragment ,true,“log”)
        setContent(mContent, up == null, up == null ? getString(R.string.logs) : up.getName());
    }
④接着跳转到父类class ListContentFragmentInternal extends BetterListFragmentInternal
 public void setContent(FragmentInterfaceWrapper content, boolean clearChoices, String breadcrumb) {
        mCurrentContent = content;
        if (getActivity() instanceof FragmentActivity) {
            Fragment f = (Fragment)mCurrentContent;
            FragmentActivity fa = (FragmentActivity)getActivity();
            final FragmentManager fm = fa.getSupportFragmentManager();
            FragmentTransaction ft = fa.getSupportFragmentManager().beginTransaction();
     //隐藏掉“允许”与“拒绝”的界面
            if (isPaged()) {
                View v = getFragment().getView();
                Assert.assertNotNull(v);
                final View l = v.findViewById(R.id.list_fragment);
                Assert.assertNotNull(l);
                l.setVisibility(View.GONE);
                fm.addOnBackStackChangedListener(new OnBackStackChangedListener() {
                    {
                        listener = this;
                    }
                    @Override
                    public void onBackStackChanged() {
                        Fragment f = (Fragment)getFragment();
                        if (f.isDetached() || f.isRemoving()) {
                            fm.removeOnBackStackChangedListener(this);
                            return;
                        }
                        View v = getFragment().getView();
                        if (v == null)
                            return;
                        final View l = v.findViewById(R.id.list_fragment);
                        if (l == null)
                            return;
                        if (fm.getBackStackEntryCount() > 0 && "content".equals(fm.getBackStackEntryAt(fm.getBackStackEntryCount() - 1).getName())) {
                            l.setVisibility(View.GONE);
                        }
                        else {
                            l.setVisibility(View.VISIBLE);
                        }
                    }
                });

                fm.popBackStack("content", FragmentManager.POP_BACK_STACK_INCLUSIVE);
                ft.setBreadCrumbTitle(breadcrumb);
                ft.setBreadCrumbShortTitle(breadcrumb);
                ft.addToBackStack("content");
            }
     //显示传过来的content界面,此时为logfragement
            ft.replace(getContentId(), f, "content");
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            ft.commit();
        }
        else {
            setContentNative(breadcrumb);
        }

        if (clearChoices)
            getListView().clearChoices();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值