Android ListView在Fragment中的使用示例詳解
一、前言:
因為工作一直在用mvvm框架,因此這篇文章是基于mvvm框架寫的。在Fragment復(fù)制之前一定要謹記項目可以跑起來。確保能跑起來之后直接復(fù)制就行。
二、代碼展示:
頁面布局
?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <data> <variable name="viewModel" type="com.example.simplenotebook.ui.functionpage.regist.RegistViewModel" /> </data> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ui.functionpage.regist.RegistFragment"> <!--學(xué)習(xí)練習(xí)--> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> </layout>
item的頁面布局:
<?xml version="1.0" encoding="utf-8"?> <layout 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"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginTop="10dp" android:layout_marginRight="20dp" android:background="@color/white" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:roundPercent="0.2"> <TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="15dp" android:gravity="center_vertical" android:textColor="#3D3D3D" android:textSize="14sp" /> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout> </layout>
在java代碼中的使用:
新建一個UserBean.java
public class UserBean { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
public class RegistFragment extends Fragment { private RegistViewModel viewModel; private FragmentRegistBinding binding; private ListView myListView; @Override public void onStart() { super.onStart(); } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); viewModel = new ViewModelProvider(this).get(RegistViewModel.class); } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { if (binding == null) { binding = FragmentRegistBinding.inflate(inflater,container,false); binding.setViewModel(viewModel);//一定要在xml的<data>中申明好才可以setViewModel binding.setLifecycleOwner(this); myListView = binding.lv; myListView.setAdapter(new myAdapter(viewModel.userList,getContext())); myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Log.d("TAG", "onItemClick: "+i); } }); } View rootView = binding.getRoot(); return rootView; } /** * 給ListView設(shè)置適配器 */ public class myAdapter extends BaseAdapter{ private List<UserBean> list; private Context context;//下面把數(shù)據(jù)顯示到平臺上會有用到這個參數(shù) public myAdapter(List<UserBean> list, Context context) {//創(chuàng)建構(gòu)造方法 this.list = list; this.context = context; } @Override public int getCount() {//listView能夠顯示多少數(shù)據(jù),,一般是list有多少數(shù)據(jù)就會顯示多少數(shù)據(jù) return list.size(); } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) {//把數(shù)據(jù)顯示到界面上 //1.拿到布局文件,為了方式view不停創(chuàng)建我們需要做一個判斷,當(dāng)view為空的時候再去創(chuàng)建 ViewHoder viewHoder; if (view == null) { //每次都要去找這個控件比較耗時,如何解決呢?我們需要創(chuàng)建一個viewHoder viewHoder = new ViewHoder(); view = LayoutInflater.from(context).inflate(R.layout.item_home,viewGroup,false); viewHoder.textView = view.findViewById(R.id.tv); view.setTag(viewHoder); }else { viewHoder = (ViewHoder) view.getTag(); } //2.拿到textView,把值傳給textView // TextView textView = view.findViewById(R.id.tv); viewHoder.textView.setText(list.get(i).getName()); Log.i("TAG", "getView: "+i); //3.把view返回出去 return view; } } private final class ViewHoder{ TextView textView; } }
Fragmennt對應(yīng)的view Model
public class RegistViewModel extends ViewModel { public List<UserBean> userList = new ArrayList<>(); public void setData(){ for (int i = 0; i < 100; i++) { UserBean ub = new UserBean(); ub.setName("流沔"+i); userList.add(ub); } } }
三、效果展示:
到此這篇關(guān)于Android ListView在Fragment中的使用的文章就介紹到這了,更多相關(guān)Android ListView Fragment使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android WebView userAgent 設(shè)置為桌面UA實例
這篇文章主要介紹了Android WebView userAgent 設(shè)置為桌面UA實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03基于Android studio3.6的JNI教程之opencv實例詳解
這篇文章主要介紹了基于Android studio3.6的JNI教程之opencv實例詳解,本文通過實例代碼截圖的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03Android開發(fā)環(huán)境搭建圖文教程 親測有效!
這篇文章主要為大家詳細介紹了Android開發(fā)環(huán)境搭建圖文教程,親自測試有效的搭建方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03Android的TextView與Html相結(jié)合的具體方法
Android的TextView與Html相結(jié)合的具體方法,需要的朋友可以參考一下2013-06-06Android使用系統(tǒng)自帶的相機實現(xiàn)一鍵拍照功能
這篇文章主要介紹了Android使用系統(tǒng)自帶的相機實現(xiàn)一鍵拍照功能,非常不錯,具有參考借鑒價值,需要的朋友參考下2017-01-01Android仿微信@好友功能 輸入@跳轉(zhuǎn)、刪除整塊
這篇文章主要介紹了Android仿微信@好友功能 輸入@跳轉(zhuǎn)、刪除整塊,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-10-10Android超詳細介紹自定義多選框與點擊按鈕跳轉(zhuǎn)界面的實現(xiàn)
這篇文章主要介紹了在Android開發(fā)中如何來實現(xiàn)自定義多選框以及如何實現(xiàn)點擊按鈕跳轉(zhuǎn)界面的功能,感興趣的朋友快來看看吧2022-03-03Android自定義照相機Camera出現(xiàn)黑屏的解決方法
這篇文章主要介紹了Android自定義照相機Camera出現(xiàn)黑屏的解決方法,分析了黑屏出現(xiàn)的原因及參考解決方法,需要的朋友可以參考下2016-08-08