如何从 class 扩展 BaseAdaper 显示对话框

How to Display Dialog from a class extending BaseAdaper

我试图在对话框中显示选项卡式寻呼机视图,但我无法在我的适配器 Class 中初始化 getSupportFragmentManager extends BaseAdapter。如果我使用 MainActivity extends AppCompatActivity,则 getSupportFragmentManager 不会显示错误。这是我的代码。请指导我。

public class ContactListAdapter extends BaseAdapter { 
 ------------
 ------------
slidingListItem.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            TabDialogFragment.createBuilder(ContactListAdapter.this, getSupportFragmentManager())
                    .setTitle("Title")
                    .setSubTitle("Subtitle")
                    .setTabButtonText(new CharSequence[]{"Tab1", "Tab2"})
                    .setPositiveButtonText("Ok")
                    .setNegativeButtonText("Cancel")
                    .setNeutralButtonText("Neutral")
                    .setRequestCode(REQUEST_TABBED_DIALOG)
                    .show();
        }
    });

如何在我的适配器 Class 中初始化 getSupportFragmentManager()

您可以在适配器的 class 中创建一个字段并像那样保存 FragmentManager,方法是将其传递给适配器的构造函数。类似于:

public class ContactListAdapter extends BaseAdapter { 

private FragmentManager mFragmentManager;

public ContactListAdapter(FragmentManager fragmentManager)
    mFragmentManager = fragmentManager;
}
 ------------
 ------------
slidingListItem.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            TabDialogFragment.createBuilder(ContactListAdapter.this, mFragmentManager)
                    .setTitle("Title")
                    .setSubTitle("Subtitle")
                    .setTabButtonText(new CharSequence[]{"Tab1", "Tab2"})
                    .setPositiveButtonText("Ok")
                    .setNegativeButtonText("Cancel")
                    .setNeutralButtonText("Neutral")
                    .setRequestCode(REQUEST_TABBED_DIALOG)
                    .show();
        }
    });

并且在您的 activity 中创建此适配器时,像这样创建它:

ContactListAdapter mAdapter = new ContactListAdapter(getSupportFragmentManager());

最简单的方法是将 FragmentManager 实例传递给适配器,然后使用该实例。

The best approach however will be to give the burden of dialog creation to the activity itself.

  1. 使用方法 ex 创建接口。 showTabDialog.
  2. 在 activity 中实现此接口,并通过 "this" 将接口实例传递给适配器。
  3. 单击时调用 showTabDialog 方法并通过 activity class 构建对话框。
private View.OnClickListener mOnClickListener;

public ContactListAdapter(View.OnClickListener clickListener)
     mOnClickListener = clickListener;
}

------------
 ------------
slidingListItem.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           mOnClickListener.onClick(view);
    });

并在你的 activity/fragment 中实现 mOnClickListener 并在 onClick 中添加你的对话框相关代码。

public void onClick(view view){

TabDialogFragment.createBuilder(this, getSupportFragmentManager())
                    .setTitle("Title")
                    .setSubTitle("Subtitle")
                    .setTabButtonText(new CharSequence[]{"Tab1", "Tab2"})
                    .setPositiveButtonText("Ok")
                    .setNegativeButtonText("Cancel")
                    .setNeutralButtonText("Neutral")
                    .setRequestCode(REQUEST_TABBED_DIALOG)
                    .show();
}