【问题标题】:Closing dialog from inside a custom ArrayAdapter从自定义 ArrayAdapter 内部关闭对话框
【发布时间】: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


【解决方案1】:

我不知道如何从 在自定义 arrayAdapter 中

DialogFragment也有一个dismiss ()方法,需要在想关闭DialogFragment时调用。

在你的情况下,这样做:

1.CustomArmyAdapter类构造函数中增加一个参数,类型为SavedArmyDialog

private SavedArmyDialog objSavedArmyDialog;
public CustomArmyAdapter(SavedArmyDialog objSavedArmyDialog,...){
 this.objSavedArmyDialog=objSavedArmyDialog;
 ....
}

2. 现在在 onClick 的 Button 中类 objSavedArmyDialog.dismiss()

 public void onClick(View v) {
   ....
   //need to close the dialog from here
   objSavedArmyDialog.dismiss();
  }

3. 通过将当前类上下文传递为:

创建CustomArmyAdapter 类对象:
 CustomArmyAdapter adapter=new CustomArmyAdapter(SavedArmyDialog.this,
                                                  getActivity(), 
                                                  customArmyArray);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    相关资源
    最近更新 更多