adapter
-
GoodsAdapter`
public abstract class BaseFragment extends Fragment {@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
int layoutId = initLayoutId();
View rootView = inflater.inflate(layoutId,null);
return rootView;
}@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initView(view);
}@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initData();
}public abstract void initData();
public abstract int initLayoutId();
public abstract void initView(View view);
}`
base
-
BaseFragment`
public abstract class BaseFragment extends Fragment {@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
int layoutId = initLayoutId();
View rootView = inflater.inflate(layoutId,null);
return rootView;
}@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initView(view);
}@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initData();
}public abstract void initData();
public abstract int initLayoutId();
public abstract void initView(View view);
}` -
BaseMvpActivity`
public abstract class BaseFragment extends Fragment {@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
int layoutId = initLayoutId();
View rootView = inflater.inflate(layoutId,null);
return rootView;
}@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initView(view);
}@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initData();
}public abstract void initData();
public abstract int initLayoutId();
public abstract void initView(View view);
}` -
BasePresenter`
public abstract class BasePresenter {private WeakReference weakReference;
public BasePresenter() {
initModule();
}public void attchView(V view) {
weakReference = new WeakReference(view);
}public V getView() {
V view = weakReference.get();
return view;
}public void dettchView() {
if (weakReference != null) {
weakReference.clear();
weakReference = null;
}
}public abstract void initModule();
}` -
IBaseView
public interface IBaseView { }
bean
-
GoodsBean`
public class GoodsBean implements Serializable {private int commodityId;
private String commodityName;
private String masterPic;
private int price;
private int saleNum;
public int getCommodityId() {
return commodityId;
}public String getCommodityName() {
return commodityName;
}public String getMasterPic() {
return masterPic;
}public int getPrice() {
return price;
}public int getSaleNum() {
return saleNum;
}
}` -
GoodsReseponse`
public class GoodsReseponse implements Serializable {private List result ;
private String message;
private String status;
public List getResult() {
return result;
}public String getMessage() {
return message;
}public String getStatus() {
return status;
}
}`
fragment
-
HomeFragment`
public class HomeFragment extends BaseFragment {MySearchView mySearchView;
private MyFlowView myFlowView;
@Override
public void initData() {}
@Override
public int initLayoutId() {
return R.layout.fragment_home;
}@Override
public void initView(View view) {mySearchView=view.findViewById(R.id.mySearchView); myFlowView=view.findViewById(R.id.myFlowView); mySearchView.setSearchListener(new MySearchView.OnSearchListener() { @Override public void onSearch(String content) { myFlowView.addTag(content); } }); myFlowView.setOnTagClickListener(new MyFlowView.OnTagClickListener() { @Override public void onTagClick(String content) { Intent intent = new Intent(getActivity(), ShowActivity.class); intent.putExtra("content",content); startActivity(intent); } });
}
}` -
MyFragment`
public class MyFragment extends BaseFragment {private Button btnChangeColor;
private Button btnJs;
private WebView webView;@Override
public void initData() {webView.loadUrl("https://abnerming8.github.io/abnerming.html?tdsourcetag=s_pctim_aiomsg"); btnChangeColor.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { webView.loadUrl("javaScript:changeColor('#ff0000')"); } }); btnJs.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { webView.loadUrl("javaScript:toast()"); } }); webView.getSettings().setJavaScriptEnabled(true); webView.setWebViewClient(new WebViewClient()); webView.setWebChromeClient(new WebChromeClient()); webView.addJavascriptInterface(new ForJs(),"android");
}
@Override
public int initLayoutId() {
return R.layout.fragment_my;
}@Override
public void initView(View view) {btnChangeColor = (Button) view.findViewById(R.id.btnChangeColor); btnJs = (Button) view.findViewById(R.id.btnJs); webView = (WebView) view.findViewById(R.id.webView);
}
}`
mvp
-
ShowActivity`
public class ShowActivity extends BaseMvpActivity implements ShowContract.ShowView {
private RecyclerView recyclerView;
private GoodsAdapter goodsAdapter;
@Override
protected void initData() {
Intent intent=getIntent();
String content=intent.getStringExtra(“content”);
presenter.show(content);
}@Override
protected ShowPresenter initPresenter() {
return new ShowPresenter();
}@Override
protected void initView() {
recyclerView=findViewById(R.id.recyclerView);
StaggeredGridLayoutManager manager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(manager);}
@Override
protected int initLayoutId() {
return R.layout.activity_show;
}@Override
public void onShowSuccess(String data) {
Gson gson=new Gson();
GoodsReseponse goodsReseponse=gson.fromJson(data,GoodsReseponse.class);
List result=goodsReseponse.getResult();goodsAdapter =new GoodsAdapter(ShowActivity.this,result); recyclerView.setAdapter(goodsAdapter);
}
@Override
public void onShowFailer(String msg) {Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}` -
ShowContract`
public class ShowContract {interface ShowView extends IBaseView {
void onShowSuccess(String data);
void onShowFailer(String msg);
}interface ShowModule {
void show(String content,ShowCallBack callBack);
interface ShowCallBack{
void onShowSuccess(String data);
void onShowFailer(String msg);
}
}interface ShowPresenter{
void show(String content);
}
}` -
ShowModule`
public class ShowModule implements ShowContract.ShowModule {
@Override
public void show(String content, final ShowCallBack callBack) {
String encode=null;
try {
encode= URLEncoder.encode(content,“utf-8”);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String path = “http://172.17.8.100/small/commodity/v1/findCommodityByKeyword?page=1&count=10&keyword=” + encode;NetUtil.getInstance().doGet(path, new NetUtil.DataCallback() { @Override public void success(String s) { callBack.onShowSuccess(s); } @Override public void error(String s) { callBack.onShowFailer(s); } });
}
}` -
ShowPresenter`
public class ShowPresenter extends BasePresenter<ShowContract.ShowView> implements ShowContract.ShowPresenter {
private ShowModule showModule;
@Override
public void initModule() {
showModule=new ShowModule();
}@Override
public void show(String content) {showModule.show(content, new ShowContract.ShowModule.ShowCallBack() { @Override public void onShowSuccess(String data) { getView().onShowSuccess(data); } @Override public void onShowFailer(String msg) { getView().onShowFailer(msg); } });
}
}`
net
-
NetUtil`
public class NetUtil {private static NetUtil netUtil;
public static synchronized NetUtil getInstance(){
if (netUtil==null){
netUtil=new NetUtil();
}
return netUtil;
}public boolean networkInfo(Context context){
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if (info!=null){
return info.isConnected();
}
return false;
}private static final String TAG = “NetUtil”;
public void doGet(String path, final DataCallback callback){
RequestQueue requestQueue = Volley.newRequestQueue(App.context);
StringRequest request = new StringRequest(path, new Response.Listener() {
@Override
public void onResponse(String response) {
callback.success(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
callback.error(error.getMessage());
}
});
requestQueue.add(request);
}public void doPost(String path, final Map<String,String> map, final DataCallback callback){
RequestQueue requestQueue = Volley.newRequestQueue(App.context);
StringRequest request = new StringRequest(StringRequest.Method.POST, path, new Response.Listener() {
@Override
public void onResponse(String response) {
callback.success(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
callback.error(error.getMessage());
}
}){@Override protected Map<String, String> getParams() throws AuthFailureError { return map; } @Override public Map<String, String> getHeaders() throws AuthFailureError { HashMap<String,String> header = new HashMap<>(); header.put("userId","257"); header.put("sessionId","1569805585791257"); return header; } }; requestQueue.add(request);
}
public interface DataCallback{
void success(String s);
void error(String s);
}
}`
view
-
MyFlowView`
public class MyFlowView extends ViewGroup {private Context context;
private int screenWith;
private int tagColor;
private float tagSize;
private float tagSpace;
private OnTagClickListener onTagClickListener;public MyFlowView(Context context) {
super(context);
this.context=context;
init();
initAttr(context, null);
}public MyFlowView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context=context;
init();
initAttr(context, attrs);
}public MyFlowView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.context=context;
init();
initAttr(context, attrs);
}private void initAttr(Context context, AttributeSet attrs) {
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyFlowView);
tagColor = typedArray.getColor(R.styleable.MyFlowView__tagColor, Color.CYAN);
tagSize = typedArray.getDimension(R.styleable.MyFlowView__tagSize, 14);
tagSpace = typedArray.getDimension(R.styleable.MyFlowView__tagSpace, 20);}
private void init(){
Resources resources = context.getResources();
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
screenWith = displayMetrics.widthPixels;
}@Override
protected void onLayout(boolean b, int i, int i1, int i2, int i3) {
int childCount = getChildCount();
int left=0;
int top=0;
int right=0;
int bottom=0;int space= (int) tagSpace; for (int j = 0; j < childCount; j++) { View childAt = getChildAt(j); childAt.measure(0,0); int measuredWidth = childAt.getMeasuredWidth(); int measuredHeight = childAt.getMeasuredHeight(); left=right+space; right=left+measuredWidth; if (right>screenWith){ left=space; top=bottom+space; } right=left+measuredWidth; bottom=top+measuredHeight; childAt.layout(left,top,right,bottom); }
}
public void addTag(String tag){
final TextView textView = new TextView(context);
textView.setPadding(10,10,10,10);
textView.setText(tag);
addView(textView);textView.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { ObjectAnimator translationX = ObjectAnimator.ofFloat(textView, "scaleX",1); ObjectAnimator translationY = ObjectAnimator.ofFloat(textView, "scaleY",1); AnimatorSet set = new AnimatorSet(); set.play(translationX).with(translationY); set.setDuration(500); set.start(); set.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animator) { } @Override public void onAnimationEnd(Animator animator) { if (onTagClickListener != null) { onTagClickListener.onTagClick(textView.getText().toString()); } } @Override public void onAnimationCancel(Animator animator) { } @Override public void onAnimationRepeat(Animator animator) { } }); } });
}
public void setOnTagClickListener(OnTagClickListener onTagClickListener) {
this.onTagClickListener = onTagClickListener;
}public interface OnTagClickListener{
void onTagClick(String content);
}
}` -
MySearchView`
public class MySearchView extends LinearLayout {private ImageView ivLeft;
private EditText etContent;
private TextView tvRight;
private OnSearchListener searchListener;public MySearchView(Context context) {
super(context);
init(context);
initAttr(context, null);
}public MySearchView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
initAttr(context, attrs);
}public MySearchView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
initAttr(context, attrs);
}private void init(Context context) {
View rootView = LayoutInflater.from(context).inflate(R.layout.layout_my_search_view, this, true);
ivLeft = (ImageView) rootView.findViewById(R.id.ivLeft);
etContent = (EditText) rootView.findViewById(R.id.etContent);
tvRight = (TextView) rootView.findViewById(R.id.tvRight);
initListener();
}private void initAttr(Context context, AttributeSet attrs) {
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MySearchView);
Drawable drawable = typedArray.getDrawable(R.styleable.MySearchView__leftImage);
if (drawable != null) {
ivLeft.setBackgroundDrawable(drawable);
}
float dimension = typedArray.getDimension(R.styleable.MySearchView__midSize, 12);
etContent.setTextSize(dimension);
String hint = typedArray.getString(R.styleable.MySearchView__hint);
if (!TextUtils.isEmpty(hint)) {
etContent.setHint(hint);
}}
private void initListener() {
tvRight.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if (searchListener != null) {
String content = etContent.getText().toString();
searchListener.onSearch(content);
}
}
});}
public void setSearchListener(OnSearchListener searchListener) {
this.searchListener = searchListener;
}public interface OnSearchListener{
void onSearch(String content);
}
}`
另附:
-
App`
public class App extends Application {public static Context context;
@Override
public void onCreate() {
super.onCreate();
context=this;
}
}` -
ForJs`
public class ForJs {
@JavascriptInterface
public void show(){
Toast.makeText(App.context, “别碰我!”, Toast.LENGTH_SHORT).show();
}
}`- MainActivity`
public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;
private TabLayout tabLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);initView();
}
@SuppressLint(“WrongViewCast”)
private void initView() {
viewPager=findViewById(R.id.viewPager);
tabLayout=findViewById(R.id.tabLayout);
FragmentManager supportFragmentManager=getSupportFragmentManager();
GoodsAdapter.HomePagerAdapter homePagerAdapter=new GoodsAdapter.HomePagerAdapter(supportFragmentManager);
tabLayout.setupWithViewPager(viewPager);
viewPager.setAdapter(homePagerAdapter);
}
}` - MainActivity`