本周将listview进行了几步学习首先是一个简单的listview的制作直接从class雷中获取
如以下demo :
这个是运用ResolveInfo类将将系统中存在的软件全部拿出来使用
package com.eb.listviewdemo; import androidx.appcompat.app.AppCompatActivity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView=findViewById(R.id.app_listview); List<String> list=new ArrayList<>(); list.add("qq"); list.add("微信"); list.add("慕课网"); List<ResolveInfo> infos = getAppInfos(); View view=getLayoutInflater().inflate(R.layout.xzc,null); listView.addHeaderView(view); listView.setAdapter(new Applistview(infos)); } private List<ResolveInfo> getAppInfos() { Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); return getPackageManager().queryIntentActivities(mainIntent, 0); } public class Applistview extends BaseAdapter{ List<ResolveInfo>strings; public Applistview(List<ResolveInfo> strings) { this.strings = strings; } @Override public int getCount() { return strings.size(); } @Override public Object getItem(int position) { return strings.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { viewholer viewholer=new viewholer(); if (convertView==null) { LayoutInflater layoutInflater= (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView=layoutInflater.inflate(R.layout.list,null); viewholer.imageView=convertView.findViewById(R.id.app_list_image); viewholer.textView=convertView.findViewById(R.id.app_list_text); convertView.setTag(viewholer); } else { viewholer= (MainActivity.viewholer) convertView.getTag(); } viewholer.textView.setText(strings.get(position).activityInfo.loadLabel(getPackageManager())); viewholer.imageView.setImageDrawable(strings.get(position).activityInfo.loadIcon(getPackageManager())); convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String package1=strings.get(position).activityInfo.packageName; String classname=strings.get(position).activityInfo.name; ComponentName componentName=new ComponentName(package1,classname); Intent intent=new Intent(); intent.setComponent(componentName); startActivity(intent); } }); return convertView; } } class viewholer{ ImageView imageView; TextView textView; } }
结果展示我这个进行了拓展就是点击这个listView以后将会直接跳转到系统的app使用视频展示
第二部是从结合之前所学的网络中的操作进行拓展直接从网络中获取数据放到listview中进行
package com.eb.listviewdemo; import androidx.appcompat.app.AppCompatActivity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.widget.ListView; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; public class RequestActivity extends AppCompatActivity { private ListView listView; private String tag="RequestActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_request); listView = findViewById(R.id.app_listview); new requestAsytask().execute(); } public class requestAsytask extends AsyncTask<Void,Void,String> { @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(Void... voids) { String url="http://www.imooc.com/api/teacher?type=2&page=1"; return request(url); } private String request(String urlString) { try { URL url=new URL(urlString); HttpURLConnection connection= (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(30000); connection.setRequestMethod("GET"); connection.connect(); int responsecode =connection.getResponseCode(); String responseMessage=connection.getResponseMessage(); Log.d(tag, "request: "+responsecode); if(responsecode==HttpURLConnection.HTTP_OK) { InputStreamReader inputStreamReader=new InputStreamReader(connection.getInputStream()); BufferedReader bufferedReader=new BufferedReader(inputStreamReader); StringBuilder stringBuilder=new StringBuilder(); String line; while((line=bufferedReader.readLine())!=null) { stringBuilder.append(line); } return stringBuilder.toString(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Log.d(tag, "onPostExecute: "+s); LessonRequest lessonRequest=new LessonRequest(); try { JSONObject jsonObject=new JSONObject(s); lessonRequest.setMessage((String) jsonObject.get("msg")); lessonRequest.setStatus((Integer) jsonObject.get("status")); List<LessonInfo>lessonInfos=new ArrayList<>(); JSONArray jsonArray=jsonObject.getJSONArray("data"); for (int i = 0; i <jsonArray.length() ; i++) { LessonInfo lessonInfo=new LessonInfo(); JSONObject jsonObject1=jsonArray.getJSONObject(i); lessonInfo.setMname((String) jsonObject1.get("name")); lessonInfos.add(lessonInfo); } } catch (JSONException e) { e.printStackTrace(); } listView.setAdapter(new RequestAdapter(lessonRequest.getLessonInfos(),RequestActivity.this)); } } }
最后一个是进行了模仿微信聊天的界面
package com.eb.listviewdemo; public class ChatMessage { public ChatMessage(int myID, int friendID, String name, String date, String content, String time, String avatarUrl, boolean isComeMessage) { this.myID = myID; this.friendID = friendID; this.name = name; this.date = date; this.content = content; this.time = time; this.avatarUrl = avatarUrl; this.isComeMessage = isComeMessage; } private int myID; private int friendID; private String name; private String date; private String content; private String time; private String avatarUrl; private boolean isComeMessage = true; public String getAvatarUrl() { return avatarUrl; } public void setAvatarUrl(String avatarUrl) { this.avatarUrl = avatarUrl; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public boolean getMsgType() { return isComeMessage; } public void setMsgType(boolean isComMsg) { isComeMessage = isComMsg; } public ChatMessage() { } public int getMyID() { return myID; } public void setMyID(int myID) { this.myID = myID; } public int getFriendID() { return friendID; } public void setFriendID(int friendID) { this.friendID = friendID; } public boolean isComeMessage() { return isComeMessage; } public void setComeMessage(boolean isComMeg) { this.isComeMessage = isComMeg; } }
下边是结果展示: