Eph*_*itt 1 android dialog android-arrayadapter
我有一个自定义对话框片段,里面有一个自定义ArrayAdapter.每个列表项都有3个按钮.点击每个按钮,我有OnClickListener()一个功能.功能完成后,我需要关闭对话框.因为这是在ArrayAdapter中完成的,所以我无法dismiss()在对话框片段中调用.我尝试OnClickListener()在对话框片段中设置一个按钮,但是我得到一个空指针.
我无法弄清楚如何从自定义arrayAdapter中获取对话框片段的引用.onclick事件必须在ArrayAdapter内部发生,因为它使用特定于该列表项的信息.任何帮助将不胜感激.谢谢.
DialogFragment:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
自定义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;
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何从自定义arrayAdapter中获取对话框片段的引用
DialogFragment也有一个dismiss()方法,需要在关闭时调用它DialogFragment.
在你的情况下,做到:
1. 在CustomArmyAdapter类Constructor中再添加一个参数,类型为SavedArmyDialog:
private SavedArmyDialog objSavedArmyDialog;
public CustomArmyAdapter(SavedArmyDialog objSavedArmyDialog,...){
this.objSavedArmyDialog=objSavedArmyDialog;
....
}
Run Code Online (Sandbox Code Playgroud)
2.现在按钮objSavedArmyDialog.dismiss()里面onClick的类:
public void onClick(View v) {
....
//need to close the dialog from here
objSavedArmyDialog.dismiss();
}
Run Code Online (Sandbox Code Playgroud)
3.CustomArmyAdapter通过将当前类Context作为以下内容创建类对象:
CustomArmyAdapter adapter=new CustomArmyAdapter(SavedArmyDialog.this,
getActivity(),
customArmyArray);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2622 次 |
| 最近记录: |