具有2列表视图的片段不会检测到第二次单击

时间:2014-04-04 09:13:19

标签: android android-listfragment

我的布局有2个列表,控制器有Listfragment

当我点击第一个@android/id:list检测确定点击时,但是当我点击第二个列表时,不会检测到任何内容。

我需要在另一边实施吗?

这是我的代码:

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_tab_order_workouts, container, false);
        worksListView = (ListView) rootView.findViewById(R.id.lvWorks);
        return rootView;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initCategoryList();
        worksListView.addHeaderView(getActivity().getLayoutInflater().inflate(R.layout.work_header, null));
        worksListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getActivity(),"hol",Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void initCategoryList() {
        ArrayList<Company> companies = VirteuApplication.getInstance().getCompanies();
        Order currentOrder = VirteuApplication.getInstance().getOrder();
        for (Company company : companies) {
            if (company.getCompany().toLowerCase().equals(currentOrder.getCompany().toLowerCase())) {
                companySelected = company;
                AbstractAdapter adapter = new ParentWorkinfoDataAdapter(this.getActivity().getApplicationContext(), company.getWorktypesNames());
                setListAdapter(adapter);
                break;
            }
        }
    }

编辑: 我使用以下代码更改了ListFragment for fragment:

public class OrderAddWorkCategoryFragment extends Fragment {

    private Company companySelected = null;
    private ListView worksListView;
    private ListView categoriesListView;
    private GetWorksForCompanyApiCall getWorksApiCall;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_tab_order_workouts, container, false);
        categoriesListView = (ListView) rootView.findViewById(R.id.lvCategories);
        worksListView = (ListView) rootView.findViewById(R.id.lvWorks);
        return rootView;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initCategoryList();
        worksListView.addHeaderView(getActivity().getLayoutInflater().inflate(R.layout.work_header, null));
    }

    private void initCategoryList() {
        ArrayList<Company> companies = VirteuApplication.getInstance().getCompanies();
        Order currentOrder = VirteuApplication.getInstance().getOrder();
        for (Company company : companies) {
            if (company.getCompany().toLowerCase().equals(currentOrder.getCompany().toLowerCase())) {
                companySelected = company;
                AbstractAdapter adapter = new ParentWorkinfoDataAdapter(this.getActivity().getApplicationContext(), company.getWorktypesNames());
                categoriesListView.setAdapter(adapter);
                categoriesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        ParentWorkinfoDataAdapter.viewHolder vHolder = (ParentWorkinfoDataAdapter.viewHolder) view.getTag();
                        String workName = vHolder.getTextValue();
                        getWorks(workName);
                        getWorksApiCall.execute();
                    }
                });
                break;
            }
        }
    }

    private void initWorksLists(List<Work> works) {
        AbstractAdapter adapter = new ChildWorkinfoDataAdapter(getActivity(), works, R.layout.list_row_detail);
        worksListView.setAdapter(adapter);
        worksListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getActivity(), "hol", Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void getWorks(String workname) {

        getWorksApiCall = new GetWorksForCompanyApiCall(getActivity(), companySelected.get_id(), workname, new ApiResponseListener() {
            @Override
            public void success(Object value) {
                Gson gson = new Gson();
                Worktypes[] worktypes = gson.fromJson(value.toString(), Worktypes[].class);
                List<Work> works = new ArrayList<Work>();
                if (worktypes.length > 0 && worktypes[0].getWorktypes().get(0).getWorks() != null) {
                    works = worktypes[0].getWorktypes().get(0).getWorks();
                }

                initWorksLists(works);
            }

            @Override
            public void error(ApiException e) {

            }
        });
        getWorksApiCall.execute();
    }

}

但是worksListView不会检测到点击。

1 个答案:

答案 0 :(得分:0)

ListFragment只是一个普通Fragment,它会使ListView的布局膨胀,并在ProgressBar处于可见状态时显示ListView

为什么不使用普通片段,并根据需要自定义包含两个ListView的布局,然后为listwiew声明两个ListView变量并设置OnItemClick或无论听众如何?