我使用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);
}
});
}
});
答案 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;
}
我在此假设您的活动是在片段之前创建的,detailPane
和popWindow
是公共变量。