項目小結

社區項目開發小結(一)

(10.1-11.30)項目開發需求以及解決方案小結。

  1. Activity多級回跳
//重寫PresentActivity中的onActivityResult方法,對返回結果進行響應
    @Override
    protected void onActivityResult(int requestCode , int resultCode , Intent data ){
        switch (requestCode){
            case targetActivityRequestCode :
                if( resultCode == 1){
                    String payResult = data.getStringExtra("PayResult");
                    if(payResult.equals("...")) {
                        //onBackPressed();
                    }
                }
        }
    }
  //啓動目標Activity(要點:使用startActivityForResult方法啓動)
  Intent intent = new Intent(PresentActivity, TargetActivity.class);
                intent.putExtra("Key", value);
                startActivityForResult(intent,requestCode);//requestCode用作標記返回信息來自哪個TargetActivity
                //((Activity)mContext).startActivityForResult(intent,1);//adapter啓動需要對mContext進行強制類型轉換
//TargetActivity的返回跳轉
private void backLastActivity(boolean paySuccess) {
        Intent intent = new Intent();
        if (paySuccess) {
            intent.putExtra("PayResult", "Success");
        } else {
            intent.putExtra("PayResult", "Fail");
        }
        setResult(RESULT_OK, intent);
        finish();
    }
  1. Recycler上拉分頁加載以及下拉刷新
    該需求的實現使用RecyclerView與第三方插件BRVAH鏈接:https://www.jianshu.com/p/b343fcff51b0相結合的方式
    1. build.gradle 配置說明
      添加資源庫添加資源庫

      maven { url “https://jitpack.io” }
      添加依賴:compile ‘com.github.CymChad:BaseRecyclerViewAdapterHelper:VERSION_CODE’

    2. Adapter
      繼承BaseQuickAdapter,重寫父類的PaymentRecordRvAdapter、convert方法
//具體詳細信息請查看[鏈接](https://www.jianshu.com/p/b343fcff51b0)
public class PaymentRecordRvAdapter extends BaseQuickAdapter<PaymentRecordListBean.DataBean,BaseViewHolder> {

	private Context mContext;
	/**
		* @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 PaymentRecordRvAdapter(int layoutResId, List<DataBean> data,Context mContext) {
        super(layoutItemResId,dataBeans);
        this.mContext = mContext;
    }
    
    @Override
    protected void convert(BaseViewHolder helper, DataBean itemData) {
      ImageView imageView = helper.getView(R.id.iv_icon);
        Glide.with(mContext).load(item.getIcon()).apply(new RequestOptions().centerCrop()).into(imageView);
        helper.setText(R.id.tv_charge_type,item.getExpenseName())
                .setText(R.id.tv_time,DateUtils.formatDate(item.getBillTime(),DateUtils.DB_DATA_FORMAT));
    }
}
  1. layout.xml
 	//RecyclerView結合SwipeRefreshLayout實現下拉刷新功能
	 <android.support.v4.widget.SwipeRefreshLayout
           	 android:id="@+id/srl_refresh"
           	 android:layout_width="match_parent"
          	  android:layout_height="wrap_content">

            	<android.support.v7.widget.RecyclerView
               	 android:layout_marginTop="@dimen/y15"
               	 android:id="@+id/rv_payment_record"
               	 android:layout_width="match_parent"
               	 android:layout_height="wrap_content"/>

        </android.support.v4.widget.SwipeRefreshLayout>
  1. .Activity
/**Description:初始化下拉刷新監聽,整個生命週期有效*/
    protected void initSwipeRefreshLayoutListener(){
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                ......
                adapterDataBeans.clear();//清空數據
                quickAdapter.replaceData(adapterDataBeans);//調用QuickAdapter的replaceData通知數據清空
                quickAdapter.setEnableLoadMore(true);//重新啓動下拉分頁加載響應
                requestRecyclerDate();//啓動刷新後初次數據加載
            }
        });
    }

//初始化QuickAdapter監聽
@Override 
    public void initBrvahListener() {
     	//item點擊事件監聽
        quickAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
           //do something
            }
        });

	//上拉請求數據監聽
        quickAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
            @Override
            public void onLoadMoreRequested() {
	            //上拉請求開始前,需要停止swipeRefreshLayout的下拉刷新響應
                swipeRefreshLayout.setEnabled(false);
                requestRecyclerDate();
                //上拉刷新結束後,需要開啓swipeRefreshLayout的下拉刷新響應
                swipeRefreshLayout.setEnabled(true);
            }
        }, recyclerView);
		//設置該方法,初次加載數據不足時,系統即會停止響應下次上拉加載數據請求
        quickAdapter.disableLoadMoreIfNotFullPage();
    }

/**Description:添加分頁數據*/
    protected void addAdapterData(List<T> data){
        if (data.size() != 0) {
            pageNum++;
            adapterDataBeans.addAll(data);
            if (data.size() != PAGE_SIZE)
            /**Description:完成本次請求,關閉上拉請求監聽響應*/
                quickAdapter.loadMoreEnd();
            else
            /**Description:完成本次請求*/
                quickAdapter.loadMoreComplete();
        } else {
        	/**Description:完成本次請求,關閉上拉請求監聽響應*/
            quickAdapter.loadMoreEnd();
        }
    }
  1. Alipay集成
    3.1、導入開資源
    包下載地址:開發包
    3.2、導入開資源
    將AlipaySdk******.jar包放入應用工程libs目錄
    在這裏插入圖片描述

    3.3、添加依賴

    compile files(‘libs/alipaySdk-20170725.jar’)

    3.4、配置Manifest文件

	<activity
    	android:name="com.alipay.sdk.app.H5PayActivity"
    	android:configChanges="orientation|keyboardHidden|navigation|screenSize"
    	android:exported="false"
   	 android:screenOrientation="behind"
    	android:windowSoftInputMode="adjustResize|stateHidden" >
	</activity>
 	<activity
    	android:name="com.alipay.sdk.app.H5AuthActivity"
    	android:configChanges="orientation|keyboardHidden|navigation"
    	android:exported="false"
    	android:screenOrientation="behind"
    	android:windowSoftInputMode="adjustResize|stateHidden" >
	3.5、權限聲明
	<uses-permission android:name="android.permission.INTERNET" />
	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
	<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
	<uses-permission android:name="android.permission.READ_PHONE_STATE" />
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
	3.6、混淆規則
	在商戶應用工程的proguard-project.txt(proguard-rules.pro)裏添加以下相關規則:
	-keep class com.alipay.android.app.IAlixPay{*;}
	-keep class com.alipay.android.app.IAlixPay$Stub{*;}
	-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
	-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
	-keep class com.alipay.sdk.app.PayTask{ public *;}
	-keep class com.alipay.sdk.app.AuthTask{ public *;}
	-keep class com.alipay.sdk.app.H5PayCallback {
    	<fields>;
   	 <methods>;
	}
	-keep class com.alipay.android.phone.mrpc.core.** { *; }
	-keep class com.alipay.apmobilesecuritysdk.** { *; }
	-keep class com.alipay.mobile.framework.service.annotation.** { *; }
	-keep class com.alipay.mobilesecuritysdk.face.** { *; }
	-keep class com.alipay.tscenter.biz.rpc.** { *; }
	-keep class org.json.alipay.** { *; }
	-keep class com.alipay.tscenter.** { *; }
	-keep class com.ta.utdid2.** { *;}
	-keep class com.ut.device.** { *;}
	3.7、設置環境
	沙箱環境在super.onCreate(savedInstanceState);方法調用前調用EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
	生產環境、去掉EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);調用

	3.8、調用Alipay接口(必須在子線程中調用)
	Runnable payRunable = new Runnable() {
        	@Override
        	public void run() {
            	PayTask alipay = new PayTask(activity);
            	Map<String, String> result = alipay.payV2(signature, true);
           	 Message msg = new Message();
           	 msg.what =msgWhat;
            	msg.obj = result.get("resultStatus");
            	mHandler.sendMessage(msg);
       	 }
    	};
    	Thread payThread = new Thread(payRunable);
    	payThread.start();
  1. ButterKnife的初步使用以及目前遇到的一些坑

  2. Dialog自定義底部佈局以及Dialog對軟件盤自適應上移、下移

  3. View.addView方法實現不同過程步驟視圖生成

  4. retrofit封裝以及使用心得

  5. LifecycleSorter插件的使用心得

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章