【发布时间】:2015-11-05 01:16:56
【问题描述】:
我有一个自定义对话框片段,里面有一个自定义 ArrayAdapter。每个列表项都有 3 个按钮。单击每个按钮时,我都有一个 OnClickListener() 执行功能。功能完成后,我需要关闭对话框。因为这是在 ArrayAdapter 中完成的,所以我不能像在对话框片段中那样调用 dismiss()。我尝试为对话框片段内的按钮设置OnClickListener(),但我得到一个空指针。
我不知道如何从自定义 arrayAdapter 中获取对对话框片段的引用。 onclick 事件必须发生在 ArrayAdapter 内部,因为它使用特定于该列表项的信息。任何帮助将不胜感激。谢谢。
对话框片段:
public class SavedArmyDialog extends DialogFragment {
View mView;
public static SavedArmyDialog newInstance() {
SavedArmyDialog fragment = new SavedArmyDialog();
return fragment;
}
public SavedArmyDialog() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mView = inflater.inflate(R.layout.custom_army_list, container, false);
CustomArmyObjData customArmyObjData = new CustomArmyObjData();
ArrayList<CustomArmy> customArmyArray = customArmyObjData.getCustomArmyArray(getActivity());
CustomArmyAdapter adapter = new CustomArmyAdapter(getActivity(), customArmyArray);
ListView armyList = (ListView) mView.findViewById(R.id.armyListView);
armyList.setAdapter(adapter);
return mView;
}
}
自定义 ArrayAdapter:
public View getView(int position, View convertView, ViewGroup parent) {
final CustomArmy army = getItem(position);
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(getContext()).inflate(R.layout.individual_army_view, parent, false);
holder.armyname = (TextView) convertView.findViewById(R.id.army_name_value);
holder.townHall = (TextView) convertView.findViewById(R.id.townHallValue);
holder.armyType = (TextView) convertView.findViewById(R.id.armyTypeValue);
holder.loadButton = (Button) convertView.findViewById(R.id.loadButton);
holder.deleteButton = (Button) convertView.findViewById(R.id.deleteButton);
holder.gridLayout = (GridLayout) convertView.findViewById(R.id.armyGrid);
buildArmyCountAndIconViews(army, holder.gridLayout);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
holder.gridLayout.removeAllViews();
buildArmyCountAndIconViews(army, holder.gridLayout);
}
holder.armyname.setText(army.getName());
holder.townHall.setText(army.getTownHallRequired());
holder.armyType.setText(army.getArmyType());
holder.loadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mBus.post(new LoadNewArmy(army));
Toast.makeText(getContext(), "Woking Button", Toast.LENGTH_SHORT).show();
//need to close the dialog from here
}
});
holder.deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Utilities.deleteCustomArmy(army.getName(), getContext());
Toast.makeText(getContext(), "Army has Been Deleted", Toast.LENGTH_LONG).show();
//need to close the dialog from here
}
});
return convertView;
}
【问题讨论】:
-
请用代码示例和logcat把问题解释清楚。
-
显示来自自定义 ArrayAdapter 的对话框片段?请在您显示的位置显示代码并希望关闭它
-
我为对话框片段和自定义数组适配器添加了相关代码。我还从我需要能够关闭对话框的地方添加了 cmets。谢谢。
-
@EphraimSchmitt:看看我的回答可能对你有帮助
标签: android dialog android-arrayadapter