我自己正在学习DialogFragments。我从来没有尝试过任何东西,只能从按钮传递意图,所以我没有朝着正确的方向前进。
我想学习所有可能的方法。
是否与使用ListFragment创建列表不同?
主Activity上有2个按钮。在单击第二个Button时,它应该打开一个带有项目列表的DialogFragment,单击列表项应该在浏览器中打开一个URL。
主要活动
btnDepartment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Intent intent = new Intent(MainActivity.this, DepartmentActivity.class);
//startActivity(intent);
}
});
这是Department Class,它是一个纯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);
}
}
答案 0 :(得分:1)
[创建DialogFragment]与使用ListFragment
创建列表不同
简单地说:是的。
为什么呢?因为ListFragment
允许您访问类getListView()
和setAdapter()
以及类的实例方法。
为了对任何其他未从ListFragment
扩展的Fragment类执行此操作,您必须使用ListView
声明一些XML布局并执行类似的操作
我假设fragment_department.xml
包含ListView
的{{1}}元素,并且您不关心部门信息的显示方式。
@+id/list
答案 1 :(得分:1)
首先,您的模型必须实现Parcelable:
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);
}
}
之后,您必须实施以下方法:
btnDepartment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DepartmentFragment departmentFragment = DepartmentFragment.newInstance(department);
departmentFragment.show(getSupportFragmentManager(), "departmentFragment");
}
});
该片段如下:
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);
}
}
此外,您可以在here
查看所有信息