Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用Dialogfragment和ArrayAdapter创建列表对话框来填充Java类中的项?_Android_Listview_Android Fragments_Android Dialogfragment - Fatal编程技术网

Android 如何使用Dialogfragment和ArrayAdapter创建列表对话框来填充Java类中的项?

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

我正在自学。除了通过按钮传递意图,我从未尝试过任何事情,所以我并没有走到正确的方向

我想学习所有可能的方法

它与使用ListFragment创建列表不同吗

主活动上有两个按钮。单击第二个按钮,它将打开一个带有项目列表的DialogFragment,单击列表项目将在浏览器中打开一个URL

主要活动

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);
    }

}