从自定义警报对话框的片段中获取上下文 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());
我正在为警报对话框编写一个 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());