RecyclerView是一個比Listview強大的組件,RecyclerView顯示數據時可橫豎向,RecyclerView提供了3中顯示效果樣式LinearLayoutManager線性佈局效果,GridLayoutManager(網格佈局效果)和StaggeredGridLayoutManager(瀑布流佈局效果).
運行效果圖:
json數據:
[
{
"title": "活着"
},{
"title": "每天站在高樓上"
},
{
"title": "看着地上的小螞蟻"
},
{
"title": "它們的頭很大"
},
{
"title": "它們的腿很細"
},
{
"title": "它們拿着蘋果手機"
},
{
"title": "它們穿着耐克阿迪"
},
{
"title": "上班就要遲到了"
},
{
"title": "它們很着急"
},
{
"title": "我那可憐的吉普車"
},
{
"title": "很久沒爬山也沒過河"
},
{
"title": "它在這個城市裏"
},
{
"title": "過得很壓抑"
},
{
"title": "雖然它什麼都沒說"
},
{
"title": "但我知道它很難過"
}
,
{
"title": "......"
}
]
1、導入組件庫 recyclerview和okhttp
2、activity_main.xml中添加控件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.wdl.recyclerview.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recy"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="100dp"
android:id="@+id/recy_item"/>
</RelativeLayout>
4、Mainactivity.java
public class MainActivity extends AppCompatActivity {
//獲取的json數據
public String date;
public String title;
public RecyclerView recyclerview;
public List<Map<String,Object>> list=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerview= (RecyclerView) findViewById(R.id.recy);
//獲取數據
okhttpDate();
}
private void okhttpDate() {
Log.i("TAG","--ok-");
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient client=new OkHttpClient();
Request request=new Request.Builder().url("http://192.168.1.6:8080/RecyclerView.json").build();
try {
Response sponse=client.newCall(request).execute();
date=sponse.body().string();
//解析
jsonJXDate(date);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
private void jsonJXDate(String date) {
if(date!=null) {
try {
JSONArray array = new JSONArray(date);
for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
title = object.getString("title");
Map<String, Object> map = new HashMap<>();
map.put("title", title);
list.add(map);
}
Message msg=new Message();
msg.what=1;
handler.sendMessage(msg);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
public Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 1:
//添加分割線
recyclerview.addItemDecoration(new DividerItemDecoration(
MainActivity.this, DividerItemDecoration.VERTICAL));
recy_item_Adapter recy=new recy_item_Adapter(list,MainActivity.this);
//設置佈局顯示格式
recyclerview.setLayoutManager(new LinearLayoutManager(MainActivity.this));
recyclerview.setAdapter(recy);
break;
}
}
};
}
5、創建recyclerview適配器recy_item_Adapter.java
public class recy_item_Adapter extends RecyclerView.Adapter<recy_item_Adapter.ViewHolder> {
public List<Map<String,Object>> list=new ArrayList<>();
public Context con;
public LayoutInflater inflater;
public recy_item_Adapter(List<Map<String,Object>> list, Context con){
this.con=con;
this.list=list;
inflater=LayoutInflater.from(con);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= inflater.inflate(R.layout.recyclerview_item,null);
ViewHolder viewHolder=new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.recy_tv.setText(list.get(position).get("title").toString());
}
@Override
public int getItemCount() {
return list.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
public TextView recy_tv;
public ViewHolder(View itemView) {
super(itemView);
recy_tv= (TextView) itemView.findViewById(R.id.recy_item);
}
}
}
網絡權限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
點擊事件監聽:http://www.jianshu.com/p/f2e0463e5aef