gpt4 book ai didi

android - DialogFragment 不 float ,嵌入或作为另一个 fragment

转载 作者:行者123 更新时间:2023-11-30 04:36:20 24 4
gpt4 key购买 nike

我有这个应用程序,我为其创建了一个自定义对话框。我一定是搞砸了,因为对话框上的 .show 调用确实会弹出它,它看起来像一个全新的 fragment ,它没有 float ,而是用它的内容替换了 ui。我确实在他们对 DialogFragment 的帮助中看到了:

http://hi-android.info/docs/reference/android/app/DialogFragment.html#Lifecycle

是否可以将对话框作为常规 fragment 嵌入。虽然我没有做任何事情来做这件事,所以我无法弄清楚为什么它表现得像一个嵌入的 fragment 而不是 float 的。想了想,我的XML定义是这样的吗?上面的 dialogfragment 示例并没有真正给出 xml 布局的定义,所以也许这就是我的问题所在? (甚至将重力添加到xml文件中,仍然没有骰子)

我对这个对话框的 xml 定义在这里:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:textSize="20sp"
android:text = "Location:"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"/>
<Spinner
android:id="@+id/location_spinner"
android:layout_width = "450sp"
android:layout_height="wrap_content"/>
<!-- fill out the data on the package total cost etc -->
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button android:id="@+id/location_dlg_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Okay"/>
<Button android:id="@+id/location_dlg_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cancel"/>
<Button android:id="@+id/location_dlg_new"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Create new..."/>
</LinearLayout>
</LinearLayout>

就像我说的那样显示得很好, fragment 的代码:

        package com.viciousbytes.studiotab.subactivities.dialogfragments;

import ... ...

public class LocationPicker extends DialogFragment {

ArrayList<Location> mLocations;


public static LocationPicker newInstance()
{
LocationPicker loc = new LocationPicker();
return loc;

}
private void setLocations(ArrayList<Location> loc)
{
mLocations=loc;
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Pick a style based on the num.
int style = DialogFragment.STYLE_NORMAL, theme = android.R.style.Theme;
setStyle(style, theme);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.location_dialog, container, false);


Spinner spinner = (Spinner)v.findViewById(R.id.location_spinner);
ArrayAdapter<Location> adapter = new ArrayAdapter<Location>(v.getContext(), android.R.layout.simple_spinner_item, mLocations);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

if(mLocations==null)
spinner.setPrompt("No Locations");
else
spinner.setAdapter(adapter);

spinner.setOnItemSelectedListener(new LocationSelectedListener());

// Watch for button clicks.
Button newBtn = (Button)v.findViewById(R.id.location_dlg_new);
newBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// When button is clicked, call up to owning activity.
//create new start that activity...

}
});

// Cancel do nothing dismissthis
Button cancelBtn = (Button)v.findViewById(R.id.location_dlg_cancel);
cancelBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// When button is clicked, call up to owning activity.
//create new start that activity...

}
});

// okay button means set listener with the selected location.
Button okBtn = (Button)v.findViewById(R.id.location_dlg_ok);
okBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// When button is clicked, call up to owning activity.
//create new start that activity...

}
});


return v;
}

}

它是从 fragment 本身调用的吗?但这有关系吗?因为我正在调用 TimePIckerDialog 和 DatePickerDialog 并且它们工作正常,但是我的其他 fragment 的调用代码是:

void showLocationDialog() {     


FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment prev = getFragmentManager().findFragmentByTag("locpicker");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);

// Create and show the dialog.
DialogFragment newFragment = LocationPicker.newInstance();
newFragment.show(ft, "locpicker");
}

最佳答案

你的构造函数是错误的。尝试只有一个 static 方法 newInstance 来实例化所有情况下的 fragment ,并使用 Bundle 来存储您要在其中使用的参数 fragment 。引用基本对话部分here并将其扩展到您的案例。

关于android - DialogFragment 不 float ,嵌入或作为另一个 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6779870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com