仿b站demo(功能实现篇)

本文详细介绍了如何实现一个仿B站的Demo,特别关注了在登录注册功能中的实现细节,包括使用ViewPager+Fragment的架构,以及在输入密码时的界面美化技巧。

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

MineImageButton(历史记录):
这里说下第三方的插件类似这样的(@InjectView(R.id.register_account) EditText mRegister_account;)这个插件叫做butterknife  -- 注解
可以省去findviewbyid,感觉好用是好用,但是不是很习惯,hhh,毕竟书上和教程视频上都是老老实实的findviewbyid的。
package com.apk.bilibili.activity ;

import android.app.Activity ;
import android.os.Bundle ;
import android.view.Window ;
import android.widget.ListView ;

import com.apk.bilibili.R ;
import com.apk.bilibili.utils.BaseAdapterHelper ;
import com.apk.bilibili.utils.History ;
import com.apk.bilibili.utils.QuickAdapter ;

import java.util.List ;

import cn.bmob.v3.Bmob ;
import cn.bmob.v3.BmobQuery ;
import cn.bmob.v3.listener.FindListener ;

/**
 * Created by Administrator on 2016/8/25.
 */
public class  MineImageButton  extends Activity {
private ListView  mHistory_List ;
    protected QuickAdapter<History>  MineAdapter ;
    protected void  onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState) ;
        requestWindowFeature(Window. FEATURE_NO_TITLE) ;
        setContentView(R.layout. mine_imagebutton) ;
        Bmob. initialize( MineImageButton. this,  "4abc415ca666a3fa6301ad90a0d2fa8d") ;
mHistory_List=(ListView)findViewById(R.id. history_list) ;
        initData() ;
        queryContent() ;
    }
    public void  initData() {
        //  TODO Auto-generated method stub
        if ( MineAdapter ==  null) {
            MineAdapter new QuickAdapter<History>( MineImageButton. this, R.layout. history_item) {
                @Override
                protected void  convert(BaseAdapterHelper helper History history) {
                    helper.setText(R.id. history_tv history.getHistory_record()) ;
                }
            } ;
            mHistory_List.setAdapter( MineAdapter) ;
        }
    }
    private void  queryContent() {
        BmobQuery<History> bmobQuery =  new BmobQuery<History>() ;
        bmobQuery.findObjects( this, new FindListener<History>() {
            @Override
            public void  onSuccess(List<History> list) {

                if (list ==  null || list.size() ==  0) {
                    MineAdapter.notifyDataSetChanged() ;
                    return;
                }
                MineAdapter.addAll(list) ;
                mHistory_List.setAdapter( MineAdapter) ;


            }

            @Override
            public void  onError( int i String s) {

            }
        }) ;


    }
}
MineThridImageButton(系统消息):
package com.apk.bilibili.activity ;

import android.app.Activity ;
import android.os.Bundle ;
import android.view.Window ;
import android.widget.ListView ;

import com.apk.bilibili.R ;
import com.apk.bilibili.utils.BaseAdapterHelper ;
import com.apk.bilibili.utils.QuickAdapter ;
import com.apk.bilibili.utils.SystemMessage ;


import java.util.List ;
import cn.bmob.v3.Bmob ;
import cn.bmob.v3.BmobQuery ;
import cn.bmob.v3.listener.FindListener ;

public class MineThridImageButton extends Activity {
private ListView listView ;
protected QuickAdapter<SystemMessage> MineAdapter ;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState) ;
requestWindowFeature(Window. FEATURE_NO_TITLE) ;
setContentView(R.layout. mine_thrid_imagebutton) ;
Bmob. initialize(MineThridImageButton. this, "4abc415ca666a3fa6301ad90a0d2fa8d") ;
listView=(ListView)findViewById(R.id. listview) ;
queryContent() ;
initData() ;
}
public void initData() {
// TODO Auto-generated method stub
if ( MineAdapter == null) {
MineAdapter = new QuickAdapter<SystemMessage>( this, R.layout. item_list) {
@Override
protected void convert(BaseAdapterHelper helper , SystemMessage systemMessage) {
helper.setText(R.id. tv_title , systemMessage.getSystem_message_title()).setText(R.id. tv_content , systemMessage.getMessage_content()) ;
}
} ;
listView.setAdapter( MineAdapter) ;
}
}



private void queryContent() {
BmobQuery<SystemMessage> bmobQuery = new BmobQuery<SystemMessage>() ;
bmobQuery.findObjects( this, new FindListener<SystemMessage>() {
@Override
public void onSuccess(List<SystemMessage> list) {

if (list == null || list.size() == 0) {
MineAdapter.notifyDataSetChanged() ;
return;
}
MineAdapter.addAll(list) ;
listView.setAdapter( MineAdapter) ;


}

@Override
public void onError( int i , String s) {

}
}) ;


}
}





这里需要说明一下Bmob的查询成功这个方法是需要异步调用的
但是官方文档刚好给出了我需要实现的这么一个功能,所以就直接拿来用了
这里需要几个工具类
QuickAdapter:
package com.apk.bilibili.utils ;

/**
 * Copyright 2013 Joan Zapata
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

        import java.util.List ;

        import android.content.Context ;
        import android.view.View ;
        import android.view.ViewGroup ;
import static com.apk.bilibili.utils.BaseAdapterHelper.get ;

/**
 * Abstraction class of a BaseAdapter in which you only need
 * to provide the convert() implementation. <br/>
  * Using the provided BaseAdapterHelper, your code is minimalist.
 *  @param  < T The type of the items in the list.
 */
public abstract class QuickAdapter< Textends BaseQuickAdapter< T BaseAdapterHelper> {

    /**
     * Create a QuickAdapter.
     *  @param  context      The context.
     *  @param  layoutResId  The layout resource id of each item.
     */
    public QuickAdapter(Context context , int layoutResId) {
        super(context layoutResId) ;
    }

    /**
     * Same as QuickAdapter#QuickAdapter(Context,int) but with
     * some initialization data.
     *  @param  context      The context.
     *  @param  layoutResId  The layout resource id of each item.
     *  @param  data        A new list is created out of this one to avoid mutable list
     */
    public QuickAdapter(Context context , int layoutResId List< T> data) {
        super(context ,layoutResId ,data) ;
    }

    protected BaseAdapterHelper  getAdapterHelper( int position View convertView ViewGroup parent) {
        return  get( context convertView parent layoutResId position) ;
    }


}
BaseQuickAdapter:
package com.apk.bilibili.utils ;

import android.content.Context ;
import android.view.Gravity ;
import android.view.View ;
import android.view.ViewGroup ;
import android.widget.BaseAdapter ;
import android.widget.FrameLayout ;
import android.widget.ProgressBar ;

import java.util.ArrayList ;
import java.util.List ;

/**
 * Abstraction class of a BaseAdapter in which you only need
 * to provide the convert() implementation. <br/>
  * Using the provided BaseAdapterHelper, your code is minimalist.
 *  @param  < T The type of the items in the list.
 */
public abstract class  BaseQuickAdapter< T extends BaseAdapterHelper>  extends BaseAdapter {

    protected static final String  TAG BaseQuickAdapter. class.getSimpleName() ;

    protected final Context  context ;

    protected final int  layoutResId ;

    protected final List< Tdata ;

    protected boolean  displayIndeterminateProgress false;

    /**
     * Create a QuickAdapter.
     *  @param  context      The context.
     *  @param  layoutResId  The layout resource id of each item.
     */
    public BaseQuickAdapter(Context context , int layoutResId) {
        this(context layoutResId , null) ;
    }

    /**
     * Same as QuickAdapter#QuickAdapter(Context,int) but with
     * some initialization data.
     *  @param  context      The context.
     *  @param  layoutResId  The layout resource id of each item.
     *  @param  data        A new list is created out of this one to avoid mutable list
     */
    public BaseQuickAdapter(Context context , int layoutResId List< T> data) {
        this. data = data ==  null new ArrayList< T>() :  new ArrayList< T>(data) ;
        this. context = context ;
        this. layoutResId = layoutResId ;
    }

    @Override
    public int  getCount() {
        int extra =  displayIndeterminateProgress 0 ;
        return  data.size() + extra ;
    }

    @Override
    public  getItem( int position) {
        if (position >=  data.size())  return null;
        return  data.get(position) ;
    }

    @Override
    public long  getItemId( int position) {
        return position ;
    }

    @Override
    public int  getViewTypeCount() {
        return  2 ;
    }

    @Override
    public int  getItemViewType( int position) {
        return position >=  data.size() ? 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值