java - 在片段中添加 ListView
问题描述
我想将 ListView 添加到 Fragment。我在我的框架中创建了一个 FrameLayout,activity_main.xml
然后创建了 3 个片段(主页、标签、设置)。我所做的是创建一个底部导航视图并为上述片段创建了 3 个框架布局。
我在整个网络上搜索了如何将 ListView 添加到 Fragment,但他们说的任何代码都已弃用。我只想将 ListView 添加到设置片段。代码如下:
package com.bhiruva.dashboard.fragments;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.bhiruva.R;
public class FragmentSettings extends Fragment {
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
private String mParam1;
private String mParam2;
public FragmentSettings() {
// Required empty public constructor
}
public static FragmentSettings newInstance(String param1, String param2) {
FragmentSettings fragment = new FragmentSettings();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_settings, container, false);
}
}
这是我的 XML 代码:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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.bhiruva.dashboard.fragments.FragmentSettings">
</FrameLayout>
任何人都可以帮我更新代码吗?提前致谢!
解决方案
我将假设您已成功在屏幕上显示片段,并且您只想添加一个简单的ListView
. 这是你如何做到的:
1-ListView
使用 id 添加到您的 Fragmnet xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
onCreateView
2-在您的片段中获取对它的引用:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View contentView = inflater.inflate(R.layout.fragment_settings, container, false);
ListView listView = contentView.findViewById(R.id.listview);
return contentView;
}
ListView
3-为您的扩展创建一个自定义适配器BaseAdapter
:
class CustomAdapter extends BaseAdapter {
List<String> items;
public CustomAdapter(List<String> items) {
super();
this.items = items;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int i) {
return items.get(i);
}
@Override
public long getItemId(int i) {
return items.get(i).hashCode();
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
TextView textView = new TextView(getContext());
textView.setText(items.get(i));
return textView;
}
}
我在这里创建了一个简单的,它只使主机成为一个字符串列表,并用一个 TextView 显示每个字符串,但你可以用你想要的任何东西替换它。
4-将适配器设置ListView
为您的自定义适配器:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View contentView = inflater.inflate(R.layout.fragment_settings, container, false);
ListView listView = contentView.findViewById(R.id.listview);
// sample data
List<String> list = new ArrayList<>();
for(int i=0;i<100;i++)
list.add("Item "+i);
CustomAdapter listAdapter = new CustomAdapter(list);
listView.setAdapter(listAdapter);
return contentView;
}
完毕。您在片段中获得一个包含所有项目的 ListView。正如其他人所指出的,当您有大量项目时,不首选 ListView,在这种情况下最好使用 RecyclerView。
推荐阅读
- c# - EF 代码首先无法对非复杂空对象进行提交
- java - 使用 Oltu 的 Java Web 服务验证不记名令牌的指南?
- javascript - Can't read child of object
- loops - 从匹配的变量 bash 中打印特定列
- excel - 用于选择多个下拉选项的 VBA 代码不适用于受保护的工作表
- python-3.x - Is there anything known about interfacing between Synergy DBL and Python
- reactjs - React 元素错误地报告窗口的宽度
- python - Print a variable output in a 400 empty message code using Python
- java - How to sort this HashMap while flattening/grouping it, using streams?
- excel - 我可以过滤数据以显示 VBA 中昨天日期的当前月份吗?