Android 如何使用Dialogfragment和ArrayAdapter创建列表对话框来填充Java类中的项?
我正在自学。除了通过按钮传递意图,我从未尝试过任何事情,所以我并没有走到正确的方向 我想学习所有可能的方法 它与使用ListFragment创建列表不同吗 主活动上有两个按钮。单击第二个按钮,它将打开一个带有项目列表的DialogFragment,单击列表项目将在浏览器中打开一个URL 主要活动Android 如何使用Dialogfragment和ArrayAdapter创建列表对话框来填充Java类中的项?,android,listview,android-fragments,android-dialogfragment,Android,Listview,Android Fragments,Android Dialogfragment,我正在自学。除了通过按钮传递意图,我从未尝试过任何事情,所以我并没有走到正确的方向 我想学习所有可能的方法 它与使用ListFragment创建列表不同吗 主活动上有两个按钮。单击第二个按钮,它将打开一个带有项目列表的DialogFragment,单击列表项目将在浏览器中打开一个URL 主要活动 btnDepartment.setOnClickListener(new View.OnClickListener() { @Override publi
btnDepartment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Intent intent = new Intent(MainActivity.this, DepartmentActivity.class);
//startActivity(intent);
}
});
这是Department类,它是一个纯Java类
public class Department {
private String deptName, deptUrl;
public static final Department[] myDepartment = {
new Department("CS", "http://cs.com"),
new Department("Biology", "http://bio.com"),
new Department("Chemistry", "http://www.chemistry.com"),
new Department("Nursing", "http://nursing.com")
};
private Department(String deptName, String deptUrl){
this.deptName = deptName;
this.deptUrl = deptUrl;
}
public String getDeptName() {
return deptName;
}
public String getDeptUrl() {
return deptUrl;
}
@Override
public String toString() {
return deptName;
}
}
部门碎片
public class DepartmentFragment extends DialogFragment {
public DepartmentFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_department, container, false);
}
}
[创建DialogFragment]与使用ListFragment创建列表不同吗
简单地说:是的
为什么??因为ListFragment
允许您访问类的getListView()
和setAdapter()
以及实例方法
为了对不从ListFragment
扩展的任何其他片段类执行此操作,必须使用ListView
声明一些XML布局,并执行以下操作
我假设fragment\u department.xml
包含@+id/list
的ListView
元素,并且您不关心部门信息的显示方式
public class DepartmentFragment extends DialogFragment {
public DepartmentFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_department, container, false);
ListView lstView = (ListView) rootView.findViewById(R.id.list);
ArrayAdapter<Department> adapter = new ArrayAdapter<Department>(getActivity(), android.R.layout.simple_list_item_1, Department.myDepartment);
lstView.setAdapter(adapter);
// TODO: adapter.setOnItemClickListener
// ... handle click
// ... load webpage
return rootView;
}
}
公共类DepartmentFragment扩展了DialogFragment{
公共部门片段(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图根视图=充气机。充气(R.layout.fragment\u部门,容器,假);
ListView lstView=(ListView)rootView.findViewById(R.id.list);
ArrayAdapter=新的ArrayAdapter(getActivity(),android.R.layout.simple\u list\u item\u 1,Department.myDepartment);
lstView.setAdapter(适配器);
//TODO:adapter.setOnItemClickListener
//…点击手柄
//…加载网页
返回rootView;
}
}
首先,您的模型必须实现可包裹:
public class Department implements Parcelable {
private String deptName, deptUrl;
public static final Department[] myDepartment = {
new Department("CS", "http://cs.com"),
new Department("Biology", "http://bio.com"),
new Department("Chemistry", "http://www.chemistry.com"),
new Department("Nursing", "http://nursing.com")
};
private Department(String deptName, String deptUrl){
this.deptName = deptName;
this.deptUrl = deptUrl;
}
protected Department(Parcel in) {
deptName = in.readString();
deptUrl = in.readString();
}
public static final Creator<Department> CREATOR = new Creator<Department>() {
@Override
public Department createFromParcel(Parcel in) {
return new Department(in);
}
@Override
public Department[] newArray(int size) {
return new Department[size];
}
};
public String getDeptName() {
return deptName;
}
public String getDeptUrl() {
return deptUrl;
}
@Override
public String toString() {
return deptName;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(deptName);
parcel.writeString(deptUrl);
}
}
片段如下:
public class DepartmentFragment extends DialogFragment {
private Department department;
public DepartmentFragment() {
// Required empty public constructor
}
public static DepartmentFragment newInstance(Department department) {
DepartmentFragment f = new DepartmentFragment();
// Supply num input as an argument.
Bundle extras = new Bundle();
args.putParcelable("department", department);
f.setArguments(args);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
department = getArguments().getParcelable("department")
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_department, container, false);
}
}
此外,您还可以在以下位置查看所有信息:
public class DepartmentFragment extends DialogFragment {
private Department department;
public DepartmentFragment() {
// Required empty public constructor
}
public static DepartmentFragment newInstance(Department department) {
DepartmentFragment f = new DepartmentFragment();
// Supply num input as an argument.
Bundle extras = new Bundle();
args.putParcelable("department", department);
f.setArguments(args);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
department = getArguments().getParcelable("department")
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_department, container, false);
}
}