如何从片段布局引用窗口小部件中尚未出现的窗口小部件

时间:2014-09-17 10:32:10

标签: android android-fragments

我使用SlidingPane布局作为主/细节类型的UI。详细信息窗格是一个片段,其中包含ListView要引用的其他小部件,并在其上设置OnItemClickListener。问题是在用户选择主窗格中的特定选项之前,ListView(R.id.lvDetailsListView)尚未出现在UI中。如何从片段引用小部件?

这是我尝试的方式,但是我得到了NullPointerException:

masterList.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
                masterItemsByStore = new GetMasterItemsByStore();

                // Remove info label on store select
                if(selectStoreLabel.getVisibility() != 8){
                    selectStoreLabel.setVisibility(8);              
                }

                TextView tvStoreID = (TextView) view
                        .findViewById(R.id.tvStoreID);
                String store_id = tvStoreID.getText().toString();
                TextView tvStoreName = (TextView) view
                        .findViewById(R.id.tvStoreName);
                String store_name = tvStoreName.getText().toString();
                TextView tvStoreAddress = (TextView) view
                        .findViewById(R.id.tvStoreCity);
                String store_address = tvStoreAddress.getText().toString();
                setTitle(store_name);

                fragment = new StoreItemsFragment(store_id, store_name,
                        store_address);

                detailsList = (ListView) fragment.getView().findViewById(R.id.lvDetailsListView);

                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction()
                        .replace(R.id.detail_pane, fragment).commit();

                slidingPane.closePane();

                detailsList.setOnItemClickListener(new OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {
                        // TODO Auto-generated method stub
                        detailPane.getForeground().setAlpha(200);
                        popWindow.showAtLocation(view, Gravity.TOP, 0, 150);
                    }
                });
            }
        });

1 个答案:

答案 0 :(得分:2)

你应该在你的片段中做到这一点

例如,在StoreItemsFragment

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
    // Inflate fragment's layout and prepare parent, list variables
    View view = inflater.inflate(R.layout.fragment_layout, container, false);

    ListView detailsList = (ListView) view.findViewById(R.id.lvDetailsListView);
    detailsList.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            // TODO Auto-generated method stub
            ((YourActivity)getActivity()).detailPane.getForeground().setAlpha(200);
            ((YourActivity)getActivity()).popWindow.showAtLocation(view, Gravity.TOP, 0, 150);
        }
    });

    return view;
}

我在此假设您的活动是在片段之前创建的,detailPanepopWindow是公共变量。