从自定义警报对话框的片段中获取上下文 Class android

Get Context in fragment from Custom Aler Dialog Class android

我正在为警报对话框编写一个 class,我想在我的 Fragment Class.I 中使用它,已经在此 class 上实现了 AdapterView.OnitemClickListener。我已经为标题、上下文、项目、请求代码、侦听器声明了私有字段。我创建了一个构造函数。现在我想调用它 class 并想为不同的目的设置不同类型的字符串。但是我在声明构造函数时遇到错误。我想知道如何在片段 class 中调用此构造函数。我的警报对话框代码 Class 是

public class Alert extends Dialog implements AdapterView.OnItemClickListener{

public interface OnDialogItemClickListener {
    void onDialogItemClick(int requestCode, int position,String item);
}

private String title;
private Context context;
private String[] items;
private int requestcode;
private OnDialogItemClickListener listener;

public Alert(Context context, String title, String[] items, int requestcode, OnDialogItemClickListener listener) {
    super(context,R.style.DialogTheme);
    this.title = title;
    this.items = items;
    this.requestcode = requestcode;
    this.listener = listener;

}
private TextView textView;
private ListView listView;
private Button cancel;
private ArrayAdapter<String> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.first_alertlist_contact);
    textView = (TextView) findViewById(R.id.title);
    listView = (ListView) findViewById(R.id.listView1);
    cancel=(Button)findViewById(R.id.cancel_button);
    adapter = new ArrayAdapter<String>(context, R.layout.first_alertlist_textstyle,android.R.id.text1, items);
    textView.setText(title);
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(this);
}

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    listener.onDialogItemClick(requestcode,i, adapter.getItem(i));
    dismiss();
}

}

我的 MainFragment Class 是

 public class MainFragment extends DialogFragment implements View.OnClickListener {
 private static final int REQUEST_CODE_SECOND = 2;
 private static final int REQUEST_CODE_FIRST = 1;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    View view = inflater.inflate(R.layout.fragment_main, container, false);

    Button button1 = (Button) view.findViewById(R.id.button1);
    button1.setOnClickListener(this);
    //registerForContextMenu(btn);
    Button button2 = (Button) view.findViewById(R.id.button2);
    button2.setOnClickListener(this);
    return view;

}

@Override
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.button1:
            showFirstDialogwithList();
            break;
           .............
            break;
    }

}

private void showFirstDialogwithList() {
    String[] companyName = getResources().getStringArray(R.array.company_name);

 // I am getting error in this line
    Alert alert=new Alert(getActivity().getApplicationContext(),"Contact", companyName,REQUEST_CODE_FIRST,getActivity());
    alert.show();

使用片段 activity 上下文代替 getActivity().getApplicationContext()。

@Override
    public void onAttach(Context context) {
        super.onAttach(context);

        Activity a;

        if (context instanceof Activity){
            a=(Activity) context;
        }

    }
Alert alert=new Alert(getActivity().getApplicationContext(),"Contact", companyName,REQUEST_CODE_FIRST,**getActivity()**);

您正在将 activity 上下文作为侦听器的最后一个参数传递。

只需在此处传递 this 关键字并让您的片段实现该回调。

Alert alert=new Alert(getActivity().getApplicationContext(),"Contact", companyName,REQUEST_CODE_FIRST,this);

试试这条线

Alert alert=new Alert(getView().getContext(),"Contact",companyName,REQUEST_CODE_FIRST,getActivity());
alert.show();

在你的 CoreApplication.java

中写下代码

步骤 1) public class CoreApplication 扩展应用程序 {

私有静态CoreApplication实例; .. }

步骤2) onCreate(){ .... 实例=这个;

}

step3 )添加这个方法()

public static CoreApplication getGlobalApplicationContext() {

    if (instance == null) {
        throw new IllegalStateException("this application does not 

继承GlobalApplication"); }

    return instance;

}

步骤4) 在您的 Fragment.class

中调用此应用程序方法

AlertDialog.Builder alert = new AlertDialog.Builder(getGlobalApplicationContext());