MVP登录注册 RecycleView列表展示

BaseInterface

package com.bawei.myapplication.application;
public interface BaseInterface {
//P
    public interface PresenterInterface {
      public void toLogin(String phone, String pwd);
      public void toSign(String phone, String pwd);
    public void toShowList();
    public void onDeistry();
    }
//V
    public interface ViewInterface {
        public void showLogin(String str);
        public void showSign(String str);
}
    public interface ListViewInterface{
        public void showList(Object obj);
    }
 }

contance

package com.bawei.myapplication.application;

public class Contance {
    public static final String SIGN_URL="http://172.17.8.100/small/user/v1/register";
    public static final String LOGIN_URL="http://172.17.8.100/small/user/v1/login";
    public static final String LIST_URL="http://365jia.cn/news/api3/365jia/news/headline?page=1";

}

httputil

public class HttpUtils {
    //单例
    Contance contance;
    static HttpUtils utils;
    public OkHttpClient okHttpClient;

    private HttpUtils(){
        okHttpClient = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Request request = chain.request();
                Response response = chain.proceed(request);
                return response;
            }
        }).build();
    }
    public static HttpUtils getInstance(){
        if(utils==null){
            utils=new HttpUtils();
        }
        return utils;
    }

    public void doGet(String url,Callback callback){
        Request request = new Request.Builder()
                .url(url)
                .get()
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(callback);
    }

    public void dopost(String url,String phone, String pwd, Callback callback){
        FormBody.Builder builder = new FormBody.Builder();
        builder.add("phone",phone);
        builder.add("pwd",pwd);
        RequestBody body = builder.build();
        Request request=new Request.Builder()
                .post(body)
                .url(url)
                .build();

        Call call= okHttpClient.newCall(request);
        call.enqueue(callback);
    }
}

M

public class MainModel{

MyCallback myCallback;
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            String josn = (String) msg.obj;
            int type =msg.arg1;
            if (type==1){
                try {
                    JSONObject object=new JSONObject(josn);
                    String str=object.getString("message");
                    myCallback.success(str);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            if (type==2){
                Gson gson=new Gson();
                JsonBean jsonBean=gson.fromJson(josn, JsonBean.class);
                myCallback.success(josn);
            }
        }
    };
    public void getRequst(){
        HttpUtils utile = HttpUtils.getInstance();
        utile.doGet(Contance.LIST_URL, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String json = response.body().string();
                Message message = new Message();
                message.obj = json;
                message.arg1 = 1;
                handler.sendMessage(message);
            }
        });
    }
   public void postRequst(String url,String phone,String pwd){
       HttpUtils utils=HttpUtils.getInstance();
        utils.dopost(url,phone, pwd, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String json = response.body().string();
                Message message = new Message();
                message.obj=json;
                message.arg1=1;
                handler.sendMessage(message);
            }
        });
   }
    public void setMyCallback(MyCallback myCallback){
        this.myCallback=myCallback;
    }
    public interface MyCallback{
        public void success(String mes);
    }
}

P

public class MainPresenter<T> implements BaseInterface.PresenterInterface {
    MainModel myModel;
    T tt;
public MainPresenter(T t){
    this.tt=t;
    myModel = new MainModel();
}
    @Override
    public void toLogin(String phone, String pwd) {
        myModel.setMyCallback(new MainModel.MyCallback() {
            @Override
            public void success(String mes) {
                ((BaseInterface.ViewInterface)tt).showLogin(mes);
            }
        });
        myModel.postRequst(Contance.LOGIN_URL,phone, pwd);
    }
    @Override
    public void toSign(String phone, String pwd) {
        myModel.setMyCallback(new MainModel.MyCallback() {
            @Override
            public void success(String mes) {
                ((BaseInterface.ViewInterface)tt).showSign(mes);
            }
        });
        myModel.postRequst(Contance.SIGN_URL,phone, pwd);
    }
    @Override
    public void toShowList() {
            myModel.setMyCallback(new MainModel.MyCallback() {
                @Override
                public void success(String mes) {
                   BaseInterface.ListViewInterface listViewInterface= ((BaseInterface.ListViewInterface)tt);
                   listViewInterface.showList(mes);
                }
            });
        myModel.getRequst();
    }
    @Override
    public void onDeistry() {
        if (tt!=null){
            tt=null;
        }
    }
}

V
main2

public class Main2Activity extends AppCompatActivity implements BaseInterface.ListViewInterface{
    BaseInterface.PresenterInterface pInterface;
    RecyclerView list;
    List<JsonBean.DataBeanX.DataBean> mlist=new ArrayList<>();
    MyAdapter myAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        list = findViewById(R.id.RecyclerView_id);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        list.setLayoutManager(layoutManager);
        myAdapter = new MyAdapter(mlist,this);
        list.setAdapter(myAdapter);
        pInterface = new MainPresenter(this);
        pInterface.toShowList();
    }
    @Override
    public void showList(Object obj) {
        JsonBean jsonBean= (JsonBean) obj;
        mlist.addAll(jsonBean.getData().getData());
        myAdapter.notifyDataSetChanged();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        pInterface.onDeistry();
        pInterface=null;
    }
}

main

public class MainActivity extends AppCompatActivity implements BaseInterface.ViewInterface{

    BaseInterface.PresenterInterface pInterface;
    public EditText phone;
    public EditText pwd;
    public Button login;
    public Button sign;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pInterface = new MainPresenter(this);
        initView();
    }
    public void initView() {
        phone = findViewById(R.id.phone_id);
        pwd = findViewById(R.id.pwd_id);
        login = findViewById(R.id.login_id);
        sign = findViewById(R.id.sign_id);
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String lphone = phone.getText().toString();
                String lpwd = pwd.getText().toString();
                pInterface.toLogin(lphone, lpwd);
            }
        });
        sign.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String lphone = phone.getText().toString();
                String lpwd = pwd.getText().toString();
                pInterface.toSign(lphone, lpwd);
            }
        });
    }
    @Override
    public void showLogin(String str) {
        if (str.equals("登录成功")){
            Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
            Intent intent=new Intent(MainActivity.this,Main2Activity.class);
            startActivity(intent);
        }else {
            Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
        }
    }
    @Override
    public void showSign(String str) {
        Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
    }
}

adapter

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.Holder> {
    List<JsonBean.DataBeanX.DataBean> list;
    Context context;
    int type=2;
    View view=null;
    public MyAdapter(List<JsonBean.DataBeanX.DataBean> list, Context context) {
        this.list=list;
        this.context=context;
    }
    @NonNull
    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        if (type==2){
            view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, null);
        }
        return new Holder(view);
    }
    @Override
    public void onBindViewHolder(@NonNull Holder holder, int i) {
        if (type==2){
            String title=list.get(i).getTitle();
            String image="http://365jia.cn/uploads/"+list.get(i).getPics().get(0);
            if(holder !=null&&holder.title!=null){
                holder.title.setText(title);
                Glide.with(context).load(image).into(holder.image);
            }
        }
    }
    @Override
    public int getItemCount() {
        if (list!=null){
            return list.size();
        }
        return 0;
    }
    public class Holder extends RecyclerView.ViewHolder{
        public TextView title;
        public ImageView image;
        public Holder(@NonNull View itemView) {
            super(itemView);
            title = itemView.findViewById(R.id.tet);
            image = itemView.findViewById(R.id.image);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
### 回答1: RecyclerView是Android官方提供的一个强大的控件,用于在Android应用中展示大量数据列表。要实现RecyclerView下载列表,首先需要在布局文件中添加RecyclerView控件。 在Activity中,设置RecyclerView的布局管理器和适配器。布局管理器可以选择线性布局、网格布局或瀑布流布局等,根据需要选择适合的布局方式。适配器负责管理数据源并定义列表项的布局和绑定数据。 下载列表的实现思路如下: 1. 创建一个数据模型类,用于存储下载项的相关信息,例如文件名、下载进度、状态等。 2. 创建一个列表项布局文件,展示下载项的相关信息,可以使用TextView、ImageView等控件展示文件名、下载进度和状态。 3. 创建一个列表项布局文件对应的ViewHolder类,用于获取布局中的控件对象。 4. 创建一个适配器类,继承RecyclerView.Adapter,并提供方法实现数据绑定和视图创建等功能。适配器中需要实现以下方法: a. onCreateViewHolder方法:创建ViewHolder对象,并为ViewHolder绑定列表项布局文件。 b. onBindViewHolder方法:将数据源中的数据绑定到ViewHolder中的控件上。 c. getItemCount方法:返回数据源的大小。 5. 在Activity中,通过findViewById方法获取RecyclerView对象,并设置布局管理器和适配器。 6. 创建一个数据源列表,存储下载项的信息。 7. 在Activity中,将数据源列表赋值给适配器,并调用适配器的notifyDataSetChanged方法刷新列表。 通过以上步骤,就可以实现一个基本的RecyclerView下载列表了。可以根据需求添加下载功能、点击事件等。在数据更新时,只需要更新数据源列表,并调用适配器的notifyDataSetChanged方法即可实现列表的刷新。 ### 回答2: RecycleView 是 Android 中的一种列表控件,它可以实现高效的列表展示,并且支持对列表项的回收复用,能够提升性能和用户体验。下面是 RecycleView 下载列表的实现步骤: 1. 首先,在布局文件中添加 RecycleView 控件: ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent"/> ``` 2. 在 Activity 或 Fragment 中,获取 RecycleView 控件的对象,并设置其布局管理器和适配器: ```java RecyclerView recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); // 设置布局管理器 recyclerView.setAdapter(adapter); // 设置适配器 ``` 3. 创建适配器类 Adapter,并继承 RecyclerView.Adapter 类,并重写必要的方法: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<String> dataList; public MyAdapter(List<String> data) { this.dataList = data; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { String data = dataList.get(position); holder.textView.setText(data); } @Override public int getItemCount() { return dataList.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { public TextView textView; public ViewHolder(@NonNull View itemView) { super(itemView); textView = itemView.findViewById(R.id.textView); } } } ``` 4. 创建 RecyclerView 的列表项布局文件 item_layout.xml: ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16sp" android:padding="10dp"/> </LinearLayout> ``` 5. 在 Activity 或 Fragment 中,为 RecycleView 的适配器设置数据源,并刷新列表: ```java List<String> dataList = new ArrayList<>(); dataList.add("下载项1"); dataList.add("下载项2"); dataList.add("下载项3"); adapter.setData(dataList); adapter.notifyDataSetChanged(); ``` 这样就完成了 RecycleView 下载列表的实现,用户可以通过适配器的方法来动态地更新列表的数据源,实现下载列表展示。 ### 回答3: RecyclerView是Android中一个强大的列表控件,可以用于实现各种列表展示和交互功能,包括下载列表。要实现一个下载列表,可以按照以下步骤进行: 1. 准备数据:下载列表数据可以是一个集合,每个元素表示一个下载项,包括文件名、文件大小、下载进度等信息。可以使用一个自定义的数据模型类来表示。 2. 创建布局:在布局文件中使用RecyclerView作为列表容器,并设置布局管理器(例如LinearLayoutManager、GridLayoutManager等)来指定列表布局方式。 3. 创建适配器:创建一个自定义的适配器类,继承自RecyclerView.Adapter,实现必要的方法。在适配器中,可以定义下载列表项的布局及其相关逻辑。 4. 绑定适配器:在Activity或Fragment中,通过findViewById方法获取RecyclerView实例,然后创建适配器对象并将其绑定到RecyclerView上。 5. 实现列表项布局:在适配器的onCreateViewHolder方法中,加载列表项的布局文件,并返回一个自定义的ViewHolder对象。 6. 列表项数据绑定:在适配器的onBindViewHolder方法中,将下载列表项的数据绑定到ViewHolder中的视图控件上,显示相关信息。 7. 添加交互逻辑:根据需求,可以在适配器中为列表项的视图控件设置点击事件、长按事件等交互逻辑。比如可以为下载列表项的按钮设置点击事件,实现下载功能。 8. 更新数据:当下载进度发生变化或下载列表项状态改变时,更新对应的数据并调用适配器的notifyDataSetChanged方法,通知RecyclerView刷新显示。 通过以上的步骤,就可以实现一个基本的下载列表。需要注意的是,下载过程中的异步操作需要在合适的时机进行线程管理,以避免界面卡顿或其他问题的出现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值