在Android中与ViewPager和对话框通信
所以我一直在读Android中的对话框,我很好奇如何在我当前的代码中实现它 我跟随android创建了一个自定义布局。我创建了一个新类在Android中与ViewPager和对话框通信,android,android-layout,android-viewpager,android-button,android-dialogfragment,Android,Android Layout,Android Viewpager,Android Button,Android Dialogfragment,所以我一直在读Android中的对话框,我很好奇如何在我当前的代码中实现它 我跟随android创建了一个自定义布局。我创建了一个新类 public class AddSiteDialog extends DialogFragment { public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(
public class AddSiteDialog extends DialogFragment {
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.main, null))
.setPositiveButton(R.string.signin, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
//To change body of implemented methods use File | Settings | File Templates.
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
AddSiteDialog.this.getDialog().cancel();
}
});
return builder.create();
}
}
现在,我希望在单击ViewPager布局中的按钮时显示该对话框。在另一个班级<代码>公共类字段活动扩展活动{
我有寻呼机的地方
private class MyPagerAdapter extends PagerAdapter {
final ViewPager mPager = (ViewPager) findViewById(R.id.fieldspager);
public int getCount() {
return 3;
}
public Object instantiateItem(View collection, int position) {
LayoutInflater inflater = (LayoutInflater) collection.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ListView lv = (ListView)findViewById(android.R.id.list);
final ArrayList<String> siteList = new ArrayList<String>();
final ArrayAdapter<String> aa;
aa = new ArrayAdapter<String>(getBaseContext(), R.layout.list_row, siteList);
if(lv == null) Log.v("lv", "null");
else Log.v("aa", "null");
if (lv != null) {
lv.setAdapter(aa);
}
int resId = 0;
View view = null;
switch (position) {
case 0:
resId = R.layout.field01;
view = inflater.inflate(resId, null);
((ViewPager) collection).addView(view, 0);
return view;
case 1:
resId = R.layout.add_site;
view = inflater.inflate(resId, null);
Button addSiteButton = (Button)view.findViewById(R.id.addSiteButton);
((ViewPager) collection).addView(view, 0);
addSiteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//I want to click this button and the dialog show up
}
});
return view;
私有类MyPagerAdapter扩展了PagerAdapter{
最终ViewPager mPager=(ViewPager)findViewById(R.id.fieldspager);
public int getCount(){
返回3;
}
公共对象实例化项(视图集合,int位置){
LayoutInflater充气器=(LayoutInflater)集合。getContext()
.getSystemService(上下文布局\充气机\服务);
ListView lv=(ListView)findViewById(android.R.id.list);
最终ArrayList站点列表=新ArrayList();
最终阵列适配器aa;
aa=新的ArrayAdapter(getBaseContext(),R.layout.list_行,siteList);
如果(lv==null)Log.v(“lv”,“null”);
else Log.v(“aa”,“null”);
如果(lv!=null){
低压设置适配器(aa);
}
int剩余=0;
视图=空;
开关(位置){
案例0:
resId=R.layout.field01;
视图=充气机。充气(剩余,空);
((ViewPager)集合).addView(视图,0);
返回视图;
案例1:
resId=R.layout.add\u站点;
视图=充气机。充气(剩余,空);
Button addSiteButton=(Button)view.findViewById(R.id.addSiteButton);
((ViewPager)集合).addView(视图,0);
addSiteButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//我想点击这个按钮,对话框就会出现
}
});
返回视图;
我将如何在那里实现这一点
我是个新手,所以我想弄清楚事情是如何相互沟通的
谢谢!首先,尝试将FragmentPagerAdapter或FragmentStatePagerAdapter子类化,而不是PagerAdapter 在“getItem(…)”片段(状态)页面编辑器中,返回一个包含您提到的“addSiteButton”按钮的片段 您的片段声明了一个回调接口:
public class MyFragment extends Fragment {
...
...
public interface Callback {
public void showDialog();
}
private Callback mCallback;
@Override
public void onAttach(Activity activity) {
callback = (Callback)activity;
super.onAttach(activity);
}
@Override
public void onDetach() {
callback = null;
super.onDetach();
}
....
....
// Onclick handler of 'addSiteButton'.
onClick(View view) {
if (callback != null) {
callback.showDialog();
}
}
....
}
并确保您的活动实现回调:
public class FieldsActivity extends FragmentActivity implements MyFragment.Callback {
....
....
@Override
public void showDialog() {
// Put the code you already have to create the dialogFragment.
}
}