Android通过网络接口实现数据传递
2020-01-15 11:46
1531 查看
自定义数据传递请参考链接:
https://blog.csdn.net/weixin_42230348/article/details/103069707
1、导入依赖
导入方式请参考链接:https://blog.csdn.net/weixin_42230348/article/details/103069707
implementation 'com.squareup.retrofit2:retrofit:2.6.2' implementation 'com.squareup.retrofit2:converter-gson:2.6.2'
2、安装GsonFormat插件:File——>Settings…
3、新建network包,在下面定义一个接口(ApiDemoService)和数据数据实体类(Repo),具体实现如下:
(1)接口(ApiDemoService)
package com.wmc.loginapplication.network; import java.util.List; import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Path; public interface ApiDemoService { @GET("users/{user}/repos") //拼接地址:https://api.github.com/users/user/repos Call<List<Repo>> listRepos(@Path("user") String user); @GET("users/{user}/repos") Call<List<Repo>> getRepos(@Path("user") String user); }
(2)需要传递的数据实体Repo:下载接口数据;利用GsonFormat插件转换json数据为实体类
右击空白——>Generate…
再用同样的方式给Repo类添加一个toString()方法
ps:此处用一分钟的操作完成一个小时的工作,感受网络接口的强大吧~~~~~~
package com.wmc.loginapplication.network; import com.google.gson.annotations.SerializedName; public class Repo { /** * id : 64619295 * node_id : MDEwOlJlcG9zaXRvcnk2NDYxOTI5NQ== * name : bitmap-fonts * full_name : user/bitmap-fonts * private : false * owner : {"login":"user","id":14959,"node_id":"MDQ6VXNlcjE0OTU5","avatar_url":"https://avatars2.githubusercontent.com/u/14959?v=4","gravatar_id":"","url":"https://api.github.com/users/user","html_url":"https://github.com/user","followers_url":"https://api.github.com/users/user/followers","following_url":"https://api.github.com/users/user/following{/other_user}","gists_url":"https://api.github.com/users/user/gists{/gist_id}","starred_url":"https://api.github.com/users/user/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/user/subscriptions","organizations_url":"https://api.github.com/users/user/orgs","repos_url":"https://api.github.com/users/user/repos","events_url":"https://api.github.com/users/user/events{/privacy}","received_events_url":"https://api.github.com/users/user/received_events","type":"User","site_admin":false} * html_url : https://github.com/user/bitmap-fonts * description : Monospaced bitmap fonts for X11, good for terminal use. * fork : true * url : https://api.github.com/repos/user/bitmap-fonts * forks_url : https://api.github.com/repos/user/bitmap-fonts/forks * keys_url : https://api.github.com/repos/user/bitmap-fonts/keys{/key_id} * collaborators_url : https://api.github.com/repos/user/bitmap-fonts/collaborators{/collaborator} * teams_url : https://api.github.com/repos/user/bitmap-fonts/teams * hooks_url : https://api.github.com/repos/user/bitmap-fonts/hooks * issue_events_url : https://api.github.com/repos/user/bitmap-fonts/issues/events{/number} * events_url : https://api.github.com/repos/user/bitmap-fonts/events * assignees_url : https://api.github.com/repos/user/bitmap-fonts/assignees{/user} * branches_url : https://api.github.com/repos/user/bitmap-fonts/branches{/branch} * tags_url : https://api.github.com/repos/user/bitmap-fonts/tags * blobs_url : https://api.github.com/repos/user/bitmap-fonts/git/blobs{/sha} * git_tags_url : https://api.github.com/repos/user/bitmap-fonts/git/tags{/sha} * git_refs_url : https://api.github.com/repos/user/bitmap-fonts/git/refs{/sha} * trees_url : https://api.github.com/repos/user/bitmap-fonts/git/trees{/sha} * statuses_url : https://api.github.com/repos/user/bitmap-fonts/statuses/{sha} * languages_url : https://api.github.com/repos/user/bitmap-fonts/languages * stargazers_url : https://api.github.com/repos/user/bitmap-fonts/stargazers * contributors_url : https://api.github.com/repos/user/bitmap-fonts/contributors * subscribers_url : https://api.github.com/repos/user/bitmap-fonts/subscribers * subscription_url : https://api.github.com/repos/user/bitmap-fonts/subscription * commits_url : https://api.github.com/repos/user/bitmap-fonts/commits{/sha} * git_commits_url : https://api.github.com/repos/user/bitmap-fonts/git/commits{/sha} * comments_url : https://api.github.com/repos/user/bitmap-fonts/comments{/number} * issue_comment_url : https://api.github.com/repos/user/bitmap-fonts/issues/comments{/number} * contents_url : https://api.github.com/repos/user/bitmap-fonts/contents/{+path} * compare_url : https://api.github.com/repos/user/bitmap-fonts/compare/{base}...{head} * merges_url : https://api.github.com/repos/user/bitmap-fonts/merges * archive_url : https://api.github.com/repos/user/bitmap-fonts/{archive_format}{/ref} * downloads_url : https://api.github.com/repos/user/bitmap-fonts/downloads * issues_url : https://api.github.com/repos/user/bitmap-fonts/issues{/number} * pulls_url : https://api.github.com/repos/user/bitmap-fonts/pulls{/number} * milestones_url : https://api.github.com/repos/user/bitmap-fonts/milestones{/number} * notifications_url : https://api.github.com/repos/user/bitmap-fonts/notifications{?since,all,participating} * labels_url : https://api.github.com/repos/user/bitmap-fonts/labels{/name} * releases_url : https://api.github.com/repos/user/bitmap-fonts/releases{/id} * deployments_url : https://api.github.com/repos/user/bitmap-fonts/deployments * created_at : 2016-07-31T22:40:11Z * updated_at : 2016-07-31T22:40:23Z * pushed_at : 2016-03-13T17:25:23Z * git_url : git://github.com/user/bitmap-fonts.git * ssh_url : git@github.com:user/bitmap-fonts.git * clone_url : https://github.com/user/bitmap-fonts.git * svn_url : https://github.com/user/bitmap-fonts * homepage : null * size : 21727 * stargazers_count : 0 * watchers_count : 0 * language : Shell * has_issues : false * has_projects : true * has_downloads : true * has_wiki : true * has_pages : false * forks_count : 0 * mirror_url : null * archived : false * disabled : false * open_issues_count : 0 * license : null * forks : 0 * open_issues : 0 * watchers : 0 * default_branch : master */ private int id; private String node_id; private String name; private String full_name; @SerializedName("private") private boolean privateX; private OwnerBean owner; private String html_url; private String description; private boolean fork; private String url; private String forks_url; private String keys_url; private String collaborators_url; private String teams_url; private String hooks_url; private String issue_events_url; private String events_url; private String assignees_url; private String branches_url; private String tags_url; private String blobs_url; private String git_tags_url; private String git_refs_url; private String trees_url; private String statuses_url; private String languages_url; private String stargazers_url; private String contributors_url; private String subscribers_url; private String subscription_url; private String commits_url; private String git_commits_url; private String comments_url; private String issue_comment_url; private String contents_url; private String compare_url; private String merges_url; private String archive_url; private String downloads_url; private String issues_url; private String pulls_url; private String milestones_url; private String notifications_url; private String labels_url; private String releases_url; private String deployments_url; private String created_at; private String updated_at; private String pushed_at; private String git_url; private String ssh_url; private String clone_url; private String svn_url; private Object homepage; private int size; private int stargazers_count; private int watchers_count; private String language; private boolean has_issues; private boolean has_projects; private boolean has_downloads; private boolean has_wiki; private boolean has_pages; private int forks_count; private Object mirror_url; private boolean archived; private boolean disabled; private int open_issues_count; private Object license; private int forks; private int open_issues; private int watchers; private String default_branch; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNode_id() { return node_id; } public void setNode_id(String node_id) { this.node_id = node_id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getFull_name() { return full_name; } public void setFull_name(String full_name) { this.full_name = full_name; } public boolean isPrivateX() { return privateX; } public void setPrivateX(boolean privateX) { this.privateX = privateX; } public OwnerBean getOwner() { return owner; } public void setOwner(OwnerBean owner) { this.owner = owner; } public String getHtml_url() { return html_url; } public void setHtml_url(String html_url) { this.html_url = html_url; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public boolean isFork() { return fork; } public void setFork(boolean fork) { this.fork = fork; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getForks_url() { return forks_url; } public void setForks_url(String forks_url) { this.forks_url = forks_url; } public String getKeys_url() { return keys_url; } public void setKeys_url(String keys_url) { this.keys_url = keys_url; } public String getCollaborators_url() { return collaborators_url; } public void setCollaborators_url(String collaborators_url) { this.collaborators_url = collaborators_url; } public String getTeams_url() { return teams_url; } public void setTeams_url(String teams_url) { this.teams_url = teams_url; } public String getHooks_url() { return hooks_url; } public void setHooks_url(String hooks_url) { this.hooks_url = hooks_url; } public String getIssue_events_url() { return issue_events_url; } public void setIssue_events_url(String issue_events_url) { this.issue_events_url = issue_events_url; } public String getEvents_url() { return events_url; } public void setEvents_url(String events_url) { this.events_url = events_url; } public String getAssignees_url() { return assignees_url; } public void setAssignees_url(String assignees_url) { this.assignees_url = assignees_url; } public String getBranches_url() { return branches_url; } public void setBranches_url(String branches_url) { this.branches_url = branches_url; } public String getTags_url() { return tags_url; } public void setTags_url(String tags_url) { this.tags_url = tags_url; } public String getBlobs_url() { return blobs_url; } public void setBlobs_url(String blobs_url) { this.blobs_url = blobs_url; } public String getGit_tags_url() { return git_tags_url; } public void setGit_tags_url(String git_tags_url) { this.git_tags_url = git_tags_url; } public String getGit_refs_url() { return git_refs_url; } public void setGit_refs_url(String git_refs_url) { this.git_refs_url = git_refs_url; } public String getTrees_url() { return trees_url; } public void setTrees_url(String trees_url) { this.trees_url = trees_url; } public String getStatuses_url() { return statuses_url; } public void setStatuses_url(String statuses_url) { this.statuses_url = statuses_url; } public String getLanguages_url() { return languages_url; } public void setLanguages_url(String languages_url) { this.languages_url = languages_url; } public String getStargazers_url() { return stargazers_url; } public void setStargazers_url(String stargazers_url) { this.stargazers_url = stargazers_url; } public String getContributors_url() { return contributors_url; } public void setContributors_url(String contributors_url) { this.contributors_url = contributors_url; } public String getSubscribers_url() { return subscribers_url; } public void setSubscribers_url(String subscribers_url) { this.subscribers_url = subscribers_url; } public String getSubscription_url() { return subscription_url; } public void setSubscription_url(String subscription_url) { this.subscription_url = subscription_url; } public String getCommits_url() { return commits_url; } public void setCommits_url(String commits_url) { this.commits_url = commits_url; } public String getGit_commits_url() { return git_commits_url; } public void setGit_commits_url(String git_commits_url) { this.git_commits_url = git_commits_url; } public String getComments_url() { return comments_url; } public void setComments_url(String comments_url) { this.comments_url = comments_url; } public String getIssue_comment_url() { return issue_comment_url; } public void setIssue_comment_url(String issue_comment_url) { this.issue_comment_url = issue_comment_url; } public String getContents_url() { return contents_url; } public void setContents_url(String contents_url) { this.contents_url = contents_url; } public String getCompare_url() { return compare_url; } public void setCompare_url(String compare_url) { this.compare_url = compare_url; } public String getMerges_url() { return merges_url; } public void setMerges_url(String merges_url) { this.merges_url = merges_url; } public String getArchive_url() { return archive_url; } public void setArchive_url(String archive_url) { this.archive_url = archive_url; } public String getDownloads_url() { return downloads_url; } public void setDownloads_url(String downloads_url) { this.downloads_url = downloads_url; } public String getIssues_url() { return issues_url; } public void setIssues_url(String issues_url) { this.issues_url = issues_url; } public String getPulls_url() { return pulls_url; } public void setPulls_url(String pulls_url) { this.pulls_url = pulls_url; } public String getMilestones_url() { return milestones_url; } public void setMilestones_url(String milestones_url) { this.milestones_url = milestones_url; } public String getNotifications_url() { return notifications_url; } public void setNotifications_url(String notifications_url) { this.notifications_url = notifications_url; } public String getLabels_url() { return labels_url; } public void setLabels_url(String labels_url) { this.labels_url = labels_url; } public String getReleases_url() { return releases_url; } public void setReleases_url(String releases_url) { this.releases_url = releases_url; } public String getDeployments_url() { return deployments_url; } public void setDeployments_url(String deployments_url) { this.deployments_url = deployments_url; } public String getCreated_at() { return created_at; } public void setCreated_at(String created_at) { this.created_at = created_at; } public String getUpdated_at() { return updated_at; } public void setUpdated_at(String updated_at) { this.updated_at = updated_at; } public String getPushed_at() { return pushed_at; } public void setPushed_at(String pushed_at) { this.pushed_at = pushed_at; } public String getGit_url() { return git_url; } public void setGit_url(String git_url) { this.git_url = git_url; } public String getSsh_url() { return ssh_url; } public void setSsh_url(String ssh_url) { this.ssh_url = ssh_url; } public String getClone_url() { return clone_url; } public void setClone_url(String clone_url) { this.clone_url = clone_url; } public String getSvn_url() { return svn_url; } public void setSvn_url(String svn_url) { this.svn_url = svn_url; } public Object getHomepage() { return homepage; } public void setHomepage(Object homepage) { this.homepage = homepage; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public int getStargazers_count() { return stargazers_count; } public void setStargazers_count(int stargazers_count) { this.stargazers_count = stargazers_count; } public int getWatchers_count() { return watchers_count; } public void setWatchers_count(int watchers_count) { this.watchers_count = watchers_count; } public String getLanguage() { return language; } public void setLanguage(String language) { this.language = language; } public boolean isHas_issues() { return has_issues; } public void setHas_issues(boolean has_issues) { this.has_issues = has_issues; } public boolean isHas_projects() { return has_projects; } public void setHas_projects(boolean has_projects) { this.has_projects = has_projects; } public boolean isHas_downloads() { return has_downloads; } public void setHas_downloads(boolean has_downloads) { this.has_downloads = has_downloads; } public boolean isHas_wiki() { return has_wiki; } public void setHas_wiki(boolean has_wiki) { this.has_wiki = has_wiki; } public boolean isHas_pages() { return has_pages; } public void setHas_pages(boolean has_pages) { this.has_pages = has_pages; } public int getForks_count() { return forks_count; } public void setForks_count(int forks_count) { this.forks_count = forks_count; } public Object getMirror_url() { return mirror_url; } public void setMirror_url(Object mirror_url) { this.mirror_url = mirror_url; } public boolean isArchived() { return archived; } public void setArchived(boolean archived) { this.archived = archived; } public boolean isDisabled() { return disabled; } public void setDisabled(boolean disabled) { this.disabled = disabled; } public int getOpen_issues_count() { return open_issues_count; } public void setOpen_issues_count(int open_issues_count) { this.open_issues_count = open_issues_count; } public Object getLicense() { return license; } public void setLicense(Object license) { this.license = license; } public int getForks() { return forks; } public void setForks(int forks) { this.forks = forks; } public int getOpen_issues() { return open_issues; } public void setOpen_issues(int open_issues) { this.open_issues = open_issues; } public int getWatchers() { return watchers; } public void setWatchers(int watchers) { this.watchers = watchers; } public String getDefault_branch() { return default_branch; } public void setDefault_branch(String default_branch) { this.default_branch = default_branch; } public static class OwnerBean { /** * login : user * id : 14959 * node_id : MDQ6VXNlcjE0OTU5 * avatar_url : https://avatars2.githubusercontent.com/u/14959?v=4 * gravatar_id : * url : https://api.github.com/users/user * html_url : https://github.com/user * followers_url : https://api.github.com/users/user/followers * following_url : https://api.github.com/users/user/following{/other_user} * gists_url : https://api.github.com/users/user/gists{/gist_id} * starred_url : https://api.github.com/users/user/starred{/owner}{/repo} * subscriptions_url : https://api.github.com/users/user/subscriptions * organizations_url : https://api.github.com/users/user/orgs * repos_url : https://api.github.com/users/user/repos * events_url : https://api.github.com/users/user/events{/privacy} * received_events_url : https://api.github.com/users/user/received_events * type : User * site_admin : false */ private String login; private int id; private String node_id; private String avatar_url; private String gravatar_id; private String url; private String html_url; private String followers_url; private String following_url; private String gists_url; private String starred_url; private String subscriptions_url; private String organizations_url; private String repos_url; private String events_url; private String received_events_url; private String type; private boolean site_admin; public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNode_id() { return node_id; } public void setNode_id(String node_id) { this.node_id = node_id; } public String getAvatar_url() { return avatar_url; } public void setAvatar_url(String avatar_url) { this.avatar_url = avatar_url; } public String getGravatar_id() { return gravatar_id; } public void setGravatar_id(String gravatar_id) { this.gravatar_id = gravatar_id; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getHtml_url() { return html_url; } public void setHtml_url(String html_url) { this.html_url = html_url; } public String getFollowers_url() { return followers_url; } public void setFollowers_url(String followers_url) { this.followers_url = followers_url; } public String getFollowing_url() { return following_url; } public void setFollowing_url(String following_url) { this.following_url = following_url; } public String getGists_url() { return gists_url; } public void setGists_url(String gists_url) { this.gists_url = gists_url; } public String getStarred_url() { return starred_url; } public void setStarred_url(String starred_url) { this.starred_url = starred_url; } public String getSubscriptions_url() { return subscriptions_url; } public void setSubscriptions_url(String subscriptions_url) { this.subscriptions_url = subscriptions_url; } public String getOrganizations_url() { return organizations_url; } public void setOrganizations_url(String organizations_url) { this.organizations_url = organizations_url; } public String getRepos_url() { return repos_url; } public void setRepos_url(String repos_url) { this.repos_url = repos_url; } public String getEvents_url() { return events_url; } public void setEvents_url(String events_url) { this.events_url = events_url; } public String getReceived_events_url() { return received_events_url; } public void setReceived_events_url(String received_events_url) { this.received_events_url = received_events_url; } public String getType() { return type; } public void setType(String type) { this.type = type; } public boolean isSite_admin() { return site_admin; } public void setSite_admin(boolean site_admin) { this.site_admin = site_admin; } } }
3、因为适配器中的实体为Entity,所以这里要自定义一个实体类
package com.wmc.loginapplication; import android.os.Parcel; import android.os.Parcelable; public class Entity implements Parcelable { private int count; private String msg; public Entity(int count) { this.count = count; } public Entity(int count, String msg) { this.count = count; this.msg = msg; } public Entity(String msg) { this.msg = msg; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(this.count); dest.writeString(this.msg); } protected Entity(Parcel in) { this.count = in.readInt(); this.msg = in.readString(); } public static final Parcelable.Creator<Entity> CREATOR = new Parcelable.Creator<Entity>() { @Override public Entity createFromParcel(Parcel source) {return new Entity(source);} @Override public Entity[] newArray(int size) {return new Entity[size];} }; }
4、主活动相应RefreshActivity相应实现:注释得很详细!认真理解。
package com.wmc.loginapplication; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.os.Bundle; import android.util.Log; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.constant.SpinnerStyle; import com.scwang.smartrefresh.layout.footer.BallPulseFooter; import com.scwang.smartrefresh.layout.footer.ClassicsFooter; import com.scwang.smartrefresh.layout.header.BezierRadarHeader; import com.scwang.smartrefresh.layout.header.ClassicsHeader; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import com.wmc.loginapplication.network.ApiDemoService; import com.wmc.loginapplication.network.Repo; import java.util.ArrayList; import java.util.List; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class RefreshActivity extends AppCompatActivity { private SmartRefreshLayout refreshLayout ;//刷新布局 private RecyclerView recyclerView ;//列表布局 private RecyclerViewListDemoAdapter adapter ;//适配器 private List<Entity> data ;//要设置的数据 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_refresh); recyclerView = findViewById(R.id.recyclerView) ; refreshLayout = findViewById(R.id.refreshLayout); //设置布局管理器 recyclerView.setLayoutManager(new LinearLayoutManager(this)); //设置适配器 adapter = new RecyclerViewListDemoAdapter(this); recyclerView.setAdapter(adapter); //下拉刷新 refreshLayout.setRefreshHeader(new ClassicsHeader(this)); //上拉加载 refreshLayout.setRefreshFooter(new ClassicsFooter(this)); //为下来刷新添加事件 refreshLayout.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh(RefreshLayout refreshlayout) { initData(); refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败 } }); //为上拉下载添加事件 refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { @Override public void onLoadMore(RefreshLayout refreshlayout) { initData(); refreshlayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败 } }); } Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .addConverterFactory(GsonConverterFactory.create())//将通过网络地址请求到的json内容添加进来 .build(); ApiDemoService service = retrofit.create(ApiDemoService.class) ;//反射机制实例化ApiDemoService接口 Call<List<Repo>> call = service.listRepos("octocat");//实现接口中的方法 call.enqueue(new Callback<List<Repo>>() { @Override public void onResponse(Call<List<Repo>> call, Response<List<Repo>> response) { Log.e("----response---" , response.toString()) ; List<Repo> repos = response.body() ;//将网络请求的json数据保存到body //遍历body区的数据 for(Repo repo:repos) Entity entity = new Entity(repo.toString()) ; if(data == null){ data = new ArrayList<>() ; } data.add(entity) ; } adapter.addData(data); } @Override public void onFailure(Call<List<Repo>> call, Throwable t) { Log.e("---onFailure---", t.getMessage()); } }); } }
5、定义适配器RecyclerViewListDemoAdapter实现数据的配置和展示
package com.wmc.loginapplication; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; //自定义适配器 public class RecyclerViewListDemoAdapter extends RecyclerView.Adapter<RecyclerViewListDemoAdapter.ListViewHolder> { private List<Entity> data; private Context context ; private RecyclerViewActivity.OnItemClickListener onItemClickListener; public RecyclerViewListDemoAdapter(Context context) { this.context = context; } public void setOnItemClickListener(RecyclerViewActivity.OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } public RecyclerViewListDemoAdapter(List<Entity> data) { this.data = data; } public void setData(List<Entity> data) { this.data = data; // 刷新数据 notifyDataSetChanged(); } //为相应逻辑添加数据 public void addData(List<Entity> entities) { if (data == null) { data = new ArrayList<>(); } this.data.addAll(entities); notifyDataSetChanged(); } /** *创建一个viewHolder并返回 * @param parent 相当于Item存放的容器 * @param viewType 指定布局文件的类型 * @return 返回viewHolder对象 */ @NonNull @Override public ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { //指定对应的布局文件 View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_demo,parent,false); return new ListViewHolder(view); } /** * 将数据加载到布局文件的控件上 * @param holder 需要绑定数据的viewHolder * @param position 列表数据的下标 */ @Override public void onBindViewHolder(@NonNull RecyclerViewListDemoAdapter.ListViewHolder holder, final int position) { Entity entity = data.get(position); holder.textView.setText(entity.getMsg()); //将绑定的布局设置点击事件 holder.textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(onItemClickListener!=null){ onItemClickListener.itemClick(position,v); } } }); } /** *返回数据的大小 * @return */ @Override public int getItemCount() { return data == null ? 0 : data.size(); } //为了系统复用控件 static class ListViewHolder extends RecyclerView.ViewHolder { TextView textView; public ListViewHolder(@NonNull View itemView) { super(itemView); // 实例化该控件 textView = itemView.findViewById(R.id.tv_text); } } }
5、主活动布局activity_refresh和数据布局item_list_demo
<?xml version="1.0" encoding="utf-8"?> <com.scwang.smartrefresh.layout.SmartRefreshLayout 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:id="@+id/refreshLayout" tools:context=".RefreshActivity"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:overScrollMode="never" android:background="#fff" /> </com.scwang.smartrefresh.layout.SmartRefreshLayout>
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.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="wrap_content" android:orientation="vertical"> <!-- android:lines="5" 每個佈局最多展示5行--> <TextView android:id="@+id/tv_text" android:layout_width="0dp" android:lines="5" android:layout_height="wrap_content" android:gravity="center_horizontal" android:padding="30dp" android:textSize="18sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:text="TextView" tools:textColor="@color/colorPrimary" tools:textSize="30sp" /> <View android:id="@+id/textView7" android:layout_width="0dp" android:layout_height="2dp" android:layout_marginBottom="4dp" android:background="#4E0B0B" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_text" /> </androidx.constraintlayout.widget.ConstraintLayout>
OK,代码写完!跑起来看看!
大功告成~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Android最简单数据传递之通过实现Parcelable接口
- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- android传递数据方式1---通过Application类实现全局变量
- Android使用webview控件加载本地html,通过Js与后台Java实现数据的传递
- android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- [Android]通过剪切板实现Activity之间传递数据
- Android 实现json网络数据通过BaseAdapter加载到ListView中
- Android进阶之路-Intent传递数据,数据回写,ActionBar菜单实现,销毁前数据保存,Intent意图(电话,网络)
- Android开发:使用序列化接口Parcelable、Serializable实现Activity间传递复杂数据类型参数
- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据(转)
- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- Android实现通过浏览器点击链接打开本地应用(APP),并获取到传递的数据
- android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
- Android开发:使用序列化接口Parcelable、Serializable实现Activity间传递复杂数据类型参数