总结1

本文介绍了一个基于Android平台的应用架构设计,包括使用Butterknife进行视图绑定、通过Retrofit实现网络请求、采用Dagger进行依赖注入等关键技术。此外,还详细展示了BaseActivity和BaseFragment的实现方式,并给出了MainActivity的具体实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

依赖:

部分依赖看次博客:https://blog.youkuaiyun.com/qq_37454196/article/details/80285521

compile 'com.hjm:BottomTabBar:1.1.1'
    //butterknife
    compile 'com.jakewharton:butterknife:8.5.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
    implementation rootProject.ext.dependencies["retrofit2"]
    implementation rootProject.ext.dependencies["converter-gson"]
    implementation rootProject.ext.dependencies["rxjava2"]
    implementation rootProject.ext.dependencies["rxjava2:rxandroid"]
    implementation rootProject.ext.dependencies["dagger"]
    annotationProcessor rootProject.ext.dependencies["dagger-compiler"]
    implementation rootProject.ext.dependencies["adapter-rxjava"]
    compile 'com.facebook.fresco:fresco:1.8.1'
    compile 'com.github.bumptech.glide:glide:3.6.1'
    // 支持 GIF 动图,需要添加
    implementation 'com.facebook.fresco:animated-gif:0.12.0'
    implementation 'com.android.support:support-v4:27.1.1'
    implementation 'com.sunfusheng:marqueeview:1.3.3'
    implementation 'com.jcodecraeer:xrecyclerview:1.3.2'
    implementation 'com.youth.banner:banner:1.4.10'
    implementation 'com.android.support:design:27+'

    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

第一步先是构建BaseActivity

public interface IBase {
    int getContentLayout();

    void inject();

    void initView(View view);
}
public interface BaseContract {
    //抽取所有Presenter共性,比如绑定,解绑
    interface BasePresenter<T extends BaseView> {
        void attchView(T view);

        void detachView();
    }

    //抽取所有View的共性,比如显示进度条和关闭进度
    interface BaseView {
        void showLoading();

        void dismissLoading();
    }
}
public class BasePresenter<T extends BaseContract.BaseView> implements BaseContract.BasePresenter<T> {
    protected T mView;

    @Override
    public void attchView(T view) {
        this.mView = view;
    }

    @Override
    public void detachView() {
        if (mView != null) {
            mView = null;
        }
    }
}

条件已经备好,接下来便是BaseActivity

public abstract class BaseActicity<T extends BaseContract.BasePresenter> extends AppCompatActivity
        implements IBase, BaseContract.BaseView {
    @Inject
    protected T mPresenter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getContentLayout());
        inject();
        //绑定
        if (mPresenter != null) {
            mPresenter.attchView(this);
        }
    }

    @Override
    public void initView(View view) {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //解绑
        if (mPresenter != null) {
            mPresenter.detachView();
        }
    }

    @Override
    public void showLoading() {

    }

    @Override
    public void dismissLoading() {

    }
}

MianActivity

public class MainActivity extends BaseActicity {

    private BottomTabBar bottom_tab_bar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initView();
        bottom_tab_bar.init(getSupportFragmentManager())
                //   .setImgSize(50,50)
                .setFontSize(12)
                .setTabPadding(4, 6, 10)
                .setChangeColor(Color.RED, Color.DKGRAY)
                .addTabItem("首页", null, OneFragment.class)
                .addTabItem("分类", null, TwoFragment.class)
                .addTabItem("发现", null, ThreeFragment.class)
                .addTabItem("购物车", null, FourFragment.class)
                .addTabItem("我的", null, FiveFragment.class)
                .isShowDivider(false)
                .setOnTabChangeListener(new BottomTabBar.OnTabChangeListener() {
                    @Override
                    public void onTabChange(int position, String name) {

                    }
                });
    }

    @Override
    public int getContentLayout() {
        return R.layout.activity_main;
    }

    @Override
    public void inject() {

    }

    private void initView() {
        bottom_tab_bar = (BottomTabBar) findViewById(R.id.bottom_tab_bar);
    }
}

BaseFragment

public abstract class BaseFragment<T extends BaseContract.BasePresenter> extends Fragment implements IBase,
        BaseContract.BaseView {
    @Inject
    protected T mPresenter;
    private Unbinder bind;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        inject();
        if (mPresenter != null) {
            mPresenter.attchView(this);
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (mPresenter != null) {
            mPresenter.detachView();
        }
        if (bind != null) {
            bind.unbind();
        }
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle
            savedInstanceState) {
        View view = inflater.inflate(getContentLayout(), null);
        bind = ButterKnife.bind(getActivity(), view);
        initView(view);
        return view;
    }
    
    @Override
    public void showLoading() {

    }

    @Override
    public void dismissLoading() {

    }
}
public class TwoFragment extends BaseFragment {
    
    @Override
    public int getContentLayout() {
        return R.layout.fragment2;
    }

    @Override
    public void inject() {

    }

    @Override
    public void initView(View view) {

    }
}











俗名:垂直跑马灯;学名:垂直翻页公告使用Gradle:compile 'com.sunfusheng:marqueeview:1.1.0'属性Attribute 属性Description 描述mvAnimDuration一行文字动画执行时间mvInterval两行文字翻页时间间隔mvTextSize文字大小mvTextColor文字颜色mvGravity文字位置:left、center、rightmvSingleLine单行设置xml<com.sunfusheng.marqueeview.MarqueeView     android:id="@ id/marqueeView"     android:layout_width="match_parent"     android:layout_height="30dp"     app:mvAnimDuration="1000"     app:mvInterval="3000"     app:mvTextColor="@color/white"     app:mvTextSize="14sp"     app:mvSingleLine="true"/>设置列表数据MarqueeView marqueeView = (MarqueeView) findViewById(R.id.marqueeView); List<String> info = new ArrayList<>(); info.add("1. 大家好,我是孙福生。"); info.add("2. 欢迎大家关注我哦!"); info.add("3. GitHub帐号:sfsheng0322"); info.add("4. 新浪微博:孙福生微博"); info.add("5. 个人博客:sunfusheng.com"); info.add("6. 微信公众号:孙福生"); marqueeView.startWithList(info);设置字符串数据String notice = "心中有阳光,脚底有力量!心中有阳光,脚底有力量!心中有阳光,脚底有力量!"; marqueeView.startWithText(notice);设置事件监听marqueeView.setOnItemClickListener(new MarqueeView.OnItemClickListener() {     @Override     public void onItemClick(int position, TextView textView) {         Toast.makeText(getApplicationContext(), String.valueOf(marqueeView1.getPosition())   ". "   textView.getText(), Toast.LENGTH_SHORT).show();     } });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值