原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/Android/2019/0615/543.html
媒介:前段光阴想在fragment中做出一个ListView列表,但是一直都是UI的闪退,让我一直不晓得怎么办,非常忧愁,但是后来才发现了一个新的东西叫做ListFragment,以是这次要紧是讲一下若何应用ListFragment确立一个简略的列表
首先必要新建一个fragment援用ListFragment,以及这个fragment的结构文件,这个结构用于包容由adapter适配好的view,叫做fragment_main.xml;
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- ListFragment对应的android:id值固定为"@id/android:list" --> <ListView android:id="@id/android:list" android:layout_width="match_parent" android:layout_height="match_parent" android:drawSelectorOnTop="false" />
</LinearLayout>
新建一个list_main.xml连结adapter适配每一个view
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="16dp">
<TextView android:id="@+id/list_food" android:layout_width="match_parent" android:layout_height="wrap_content" />
</LinearLayout>
好现在我们就滥觞编纂java代码,首先新建一个简略的一个Food类
public class Food { private String mName;
public Food(String name){ mName = name;
} public String getName() { return mName;
} public void setName(String name) { mName = name;
}
}
而后滥觞新建ArrayListAdapter继承ArrayAdapter,这内部必要重写一个getView要领
但是在重写之前,现办理这个有一个必须重写的要领,并用一个int来存储一下这个资源文件,这里援用的是一个XML文件,必要背面的fragment传入这个数据,现在我们先在这里做汲取
重写
private int resourceId;
public ListMainAdapter(@NonNull Context context, int resource, @NonNull List objects) { super(context, resource, objects);
resourceId = resource;
}
而后即是重写getView要领,这里我就不写了,干脆列出全部的代码
public class ListMainAdapter extends ArrayAdapter<Food> { private int resourceId; public ListMainAdapter(@NonNull Context context, int resource, @NonNull List<Food> objects) { super(context, resource, objects); resourceId = resource;
} @NonNull @Override public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
Food food = getItem(position);//获取food工具 View view = LayoutInflater.from(getContext()).inflate(resourceId,null);
TextView textView = view.findViewById(R.id.list_food);
textView.setText(food.getName()); return view;
}
}
底下必要做的即是MainFragment.java的书写,感受照旧很容易看懂的,要紧即是重写两个要领就好。
public class MainFragment extends ListFragment {
List<Food> mFoodList; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mFoodList = new ArrayList<>();
initFood();
ListMainAdapter adapter = new ListMainAdapter(getContext(),R.layout.list_main,mFoodList); this.setListAdapter(adapter);
} @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_main,container,false);
} private void initFood(){ mFoodList.add(new Food("apple")); mFoodList.add(new Food("banana")); mFoodList.add(new Food("hot"));
}
}
末了的末了即是写MainActivity的文件了以及activity_main.xml
public class MainActivity extends AppCompatActivity { MainFragment mMainFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); mMainFragment = new MainFragment();
getSupportFragmentManager().beginTransaction().add(R.id.main_container,mMainFragment).co妹妹it();
}
}
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_container" android:layout_width="match_parent" android:layout_height="match_parent">
</FrameLayout>
梗概历程即是这样,可能少许表白不是很准确,往后会逐步变动完善,但是代码少许片面写的对照简略,没有经由优化,但优化上头和普通的差未几,这里就但是多写了,要是不行看懂何处可以留言一下,列表这方面照旧对照保举recycleview,大家可以去打听少许,欢迎交换
上篇:上一篇:Android 获取唯一机械码的代码
下篇:下一篇:Android 好用的下拉控件Spinner