您的位置:首页 > 其它

MVP登录+recyclerview列表展示(带刷新效果)

2017-11-12 18:48 489 查看
//先看看布局

//主页面布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context="com.example.weektwo.MainActivity">

<EditText
android:id="@+id/et1"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:hint="Username of Email"
/>
<EditText
android:id="@+id/et2"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:hint="PassWord"/>
<<
4000
strong>TextView
[/b]android:layout_width="match_parent"
android:layout_height="30dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center">
<Button
android:id="@+id/but1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sign in"
android:background="#f0ff00c8"/>
<TextView
android:layout_width="100dp"
android:layout_height="wrap_content" />
<Button
android:id="@+id/but2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#f0001eff"
android:text="Twitter"
/>
</LinearLayout>

</LinearLayout>

//有一个页面跳转,第二个页面布局,这里主要是recyclerview

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.weektwo.OtherActivity">
<com.liaoinstan.springview.widget.SpringView
android:id="@+id/springview"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
</com.liaoinstan.springview.widget.SpringView>

</android.support.constraint.ConstraintLayout>
//获取图文的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<ImageView
android:src="@mipmap/ic_launcher"
android:scaleType="centerCrop"
android:id="@+id/item_imageview"
android:layout_width="match_parent"
android:layout_height="100dp" />

<TextView
android:background="@color/colorPrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/item_textview"/>

</LinearLayout>
//接下来就是我们的方法
//话不多说直接上代码

//首先使我们的主方法MainActivity

package com.example.weektwo;

import android.app.ProgressDialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.example.weektwo.Bean.User;
import com.example.weektwo.Presenter.UserPresenter;
import com.example.weektwo.View.IUserView;
/**
*
*作者:瑾年
*时间:2017/11/11 10:01
*
*/
public class MainActivity extends AppCompatActivity implements IUserView,View.OnClickListener{
Button but1,but2;
EditText et1,et2;
private UserPresenter presenter;
private ProgressDialog loginProgreess;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.but1).setOnClickListener(this);
but2= (Button) findViewById(R.id.but2);
et1= (EditText) findViewById(R.id.et1);
et2= (EditText) findViewById(R.id.et2);
presenter=new UserPresenter(this);
}

@Override
public void onClick(View view) {
String username = et1.getText().toString().trim();
String password = et2.getText().toString().trim();

if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {
Toast.makeText(getApplicationContext(), "账号或密码不能为空", Toast.LENGTH_SHORT).show();
return;
}

loginProgreess = ProgressDialog.show(this, "登录", "正在登录...");
presenter.login(new User(username, password));
}

@Override
public void onLoginSuccess() {
loginProgreess.dismiss();
Intent intent=new Intent(MainActivity.this,OtherActivity.class);
startActivity(intent);
}

@Override
public void onLoginFailed(String error) {
loginProgreess.dismiss();
Toast.makeText(getApplicationContext(), "登录失败:" + error, Toast.LENGTH_SHORT).show();
}
}
//这里的登录用到了MVP,所以要构造几个类
//首先使我们的User类,用来放用户名密码

package com.example.weektwo.Bean;

/**
*作者:瑾年
* Created by lenovo on 2017/11/11.
*/

public class User {
public User(String username, String password) {
this.username = username;
this.password = password;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

private String username;
private String password;
}
//接下来使我们的Model层
//IUserMode

package com.example.weektwo.Model;

import com.example.weektwo.Bean.User;

/**
*
*作者:瑾年
*时间:2017/11/11 10:01
*
*/

public interface IUserMode {
String login(User user);
}
//UserMode
package com.example.weektwo.Model;

import com.example.weektwo.Bean.User;

/**
* Created by lenovo on 2017/11/11.
*/

public class UserMode implements IUserMode{
@Override
public String login(User user) {
boolean networkError = false; //网络是否异常

try {
Thread.sleep(3000);//模拟网络连接
if (networkError) {
return "网络异常";
} else if ("mohan".equals(user.getUsername()) && "123456".equals(user.getPassword())) {
return "true";
} else {
return "账号或密码错误";
}
} catch (InterruptedException e) {
e.printStackTrace();
return e.getMessage();
}
}
}
//Presenter层,也就是我们的P层
//UserPresenter

package com.example.weektwo.Presenter;

import android.os.Handler;
import android.os.Looper;

import com.example.weektwo.Bean.User;
import com.example.weektwo.Model.IUserMode;
import com.example.weektwo.Model.UserMode;
import com.example.weektwo.View.IUserView;

/**
*
*作者:瑾年
*时间:2017/11/11 10:01
*
*/

public class UserPresenter {
private final IUserView userView;
private final IUserMode userMode;

public UserPresenter(IUserView userView) {
this.userView = userView;
this.userMode = new UserMode();
}

/**
* 登录
*
* @param user
*/
public void login(final User user) {
new Thread() {
@Override
public void run() {
final String res = userMode.login(user);
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
if ("true".equals(res)) {
userView.onLoginSuccess();
} else {
userView.onLoginFailed(res);
}
}
});
}
}.start();
}
}
//还有我们的V层,view
//IUserView

package com.example.weektwo.View;

/**
* Created by lenovo on 2017/11/11.
*/

public interface IUserView {
/**
* 登录成功
*/
public void onLoginSuccess();

/**
* 登录失败
*
* @param error
*/
public void onLoginFailed(String error);
}
//接下来使我们的RecyclerView部分
//同样也有一个主方法,OtherActivity

package com.example.weektwo;

import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.liaoinstan.springview.container.DefaultFooter;
import com.liaoinstan.springview.container.DefaultHeader;
import com.liaoinstan.springview.widget.SpringView;

import java.util.ArrayList;
import java.util.List;
/**
*
*作者:瑾年
*时间:2017/11/11 10:00
*
*/
public class OtherActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private List<String> list = new ArrayList<>();
private SpringView springView;

@RequiresApi(api = Build.VERSION_CODES.GINGERBREAD)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);

list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72");
list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72");
list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72");
list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg");
list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg");
list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg");
list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg");

list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72");
list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72");
list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72");
list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg");
list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg");
list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg");
list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg");

// 设置布局管理器
//       new GridLayoutManager()  九宫格布局管理器
//        new LinearLayoutManager() listview 布局管理器
//
//        new StaggeredGridLayoutManager() 瀑布流 布局管理器

//        recyclerView.setLayoutManager(new GridLayoutManager(this,5));

recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, LinearLayout.VERTICAL));
final RecyclerViewAdapter adapter =  new RecyclerViewAdapter(this,list) ;
//        recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
recyclerView.setAdapter(adapter);

adapter.setIListener(new RecyclerViewAdapter.Listener() {
@Override
public void onClick(View view, int position) {
Toast.makeText(OtherActivity.this, ""+position, Toast.LENGTH_SHORT).show();
}

@Override
public void longClick(View view, int position) {

}
});
springView = (SpringView) findViewById(R.id.springview);

springView.setHeader(new DefaultHeader(this));
springView.setFooter(new DefaultFooter(this));

springView.setListener(new SpringView.OnFreshListener() {
@Override
public void onRefresh() {
//下啦
list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72");
list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72");
list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72");
list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg");
list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg");
list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg");
list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg");

list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72");
list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72");
list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72");
list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg");
list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg");
list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg");
list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg");
adapter.notifyDataSetChanged();
springView.onFinishFreshAndLoad();
}

@Override
public void onLoadmore() {
//上啦
list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72");
list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72");
list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72");
list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg");
list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg");
list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg");
list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg");

list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72");
list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72");
list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72");
list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg");
list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg");
list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg");
list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg");
adapter.notifyDataSetChanged();
springView.onFinishFreshAndLoad();

}
});

}
}
//RecyclerViewAdapter
package com.example.weektwo;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.bumptech.glide.Glide;

import java.util.List;
import java.util.Random;

import butterknife.BindView;
import butterknife.ButterKnife;

import static java.security.AccessController.getContext;

/**
*
*作者:瑾年
*时间:2017/11/11 10:00
*
*/

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ImageViewHolder> {

private Context context;
private List<String> list;
private int itemWidth ;

public RecyclerViewAdapter(Context context, List<String> list) {
this.context = context;
this.list = list;
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);

int width = wm.getDefaultDisplay().getWidth();
itemWidth = width / 3 ;

}

//创建ViewHolder
@Override
public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// 创建一个View
View view = LayoutInflater.from(context).inflate(R.layout.layout_item, null);
return new ImageViewHolder(view);
}

// 绑定view 显示数据
@Override
public void onBindViewHolder(ImageViewHolder holder, final int position) {

// 显示图片
Glide.with(context).load(list.get(position)).into(holder.itemImageview);

ViewGroup.LayoutParams params =  holder.itemImageview.getLayoutParams() ;

int itemHeight = 300 ;

itemHeight = new Random().nextInt(500);
if(itemHeight < 300){
itemHeight = 300 ;
}

params.width = itemWidth ;
params.height = itemHeight ;

holder.itemImageview.setLayoutParams(params);

holder.itemImageview.setImageResource(R.mipmap.ic_launcher);

//        ImageLoader.getInstance().displayImage(list.get(position),holder.itemImageview);

holder.textView.setText(position+"");

holder.itemImageview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(listener != null){
listener.onClick(view,position);
}
}
});

holder.itemImageview.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
listener.longClick(view,position);
return false;
}
});

}

// 获取条目的个数
@Override
public int getItemCount() {
return list.size();
}

static class ImageViewHolder extends RecyclerView.ViewHolder {

@BindView(R.id.item_imageview)
ImageView itemImageview;

@BindView(R.id.item_textview)
TextView textView;
public ImageViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);

//            itemImageview = itemView.findViewById(R.id.item_imageview);

}

}

private Listener listener ;
public void setIListener(Listener listener){
this.listener = listener;
}

public interface  Listener {
public void onClick(View view, int position);
public void longClick(View view, int position);
}

}
//TestAdapter
package com.example.weektwo;

import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;
/**
*
*作者:瑾年
*时间:2017/11/11 10:00
*
*/
public class TestAdapter extendsRecyclerView.Adapter {
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return null;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

}

@Override
public int getItemCount() {
return 0;
}
}
//做recyclerView的时候用的死数据,大家可以找个接口,用okHttp去完善一下
//还有不要忘了导依赖,下面给大家看看我这里边所用到的依赖。

//recyclerview依赖
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
//butterknife依赖
compile 'com.jakewharton:butterknife:8.1.0'
apt 'com.jakewharton:butterknife-compiler:8.1.0'
//gpuimage依赖
compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.3.0'
//glide依赖
compile 'jp.wasabeef:glide-transformations:2.0.1'
//springview依赖
compile 'com.liaoinstan.springview:library:1.3.0'
    configurations.all {
        resolutionStrategy.eachDependency { DependencyResolveDetails details ->
            def requested = details.requested
            if (requested.group == 'com.android.support') {
                if (!requested.name

                        .startsWith("multidex")) {
                    details.useVersion '25.3.0'
                }
            }
        }
    }
//导入总工程
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐