我有一个关于对话框RelativeLayout.它在普通活动中正常工作,但当我决定将其移入时DialogFragment,大多数对齐规则停止工作.这是布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minHeight="250dp" >
<TextView
android:id="@+id/label_copyright"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginTop="20dp"
android:text="Copyright (c) 2013 Copyright"
android:textSize="8dp" />
<TextView
android:id="@+id/label_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_above="@+id/label_copyright"
android:layout_marginTop="2dp"
android:text="@null" />
<TextView
android:id="@+id/label_app_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/label_version"
android:layout_centerHorizontal="true"
android:layout_marginBottom="2dp"
android:text="Application Name"
android:textSize="25dp" />
<ImageView
android:id="@+id/image_app_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/label_app_name"
android:layout_centerHorizontal="true"
android:layout_marginBottom="16dp"
android:src="@drawable/field_public_required" />
<TextView
android:id="@+id/label_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@+id/label_copyright"
android:layout_marginTop="30dp"
android:gravity="center"
android:autoLink="web"
android:text="application description with more details" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
以下是它应该如何工作,它实际上是有效的,所以在一个活动中(Eclipse图形布局截图):

以下是使用片段运行应用程序时的外观:

显然,只有第一个视图按预期居中,而其他所有视图都被推到了顶部.无论minHeight我在布局中指定哪个,行为总是相同的.
实例化对话框的代码非常简单:
@Override
public …Run Code Online (Sandbox Code Playgroud) 我想将对话框片段中的用户类型字符串:"AddFriendDialogFragment.java"传回给调用它的活动:"HomeActivity.java".我通过在"AddFriendDialogFragment.java"中声明的接口执行此操作:"EditNameDialogListener".但是出于某种原因,HomeActivity没有看到这个界面,所以我得到一个"无法解析符号:"EditNameDialogListener"错误.
"HomeActivity.java":
package tutorial.com.example.jerryhou.dialogactionbartutorial;
import android.app.Activity;
import android.app.DialogFragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
public class HomeActivity extends Activity implements EditNameDialogListener
{
@Override
public void onFinishEditDialog(String inputText)
{
Toast.makeText(this, "Hi, " + inputText, Toast.LENGTH_SHORT).show();
}
public void showUsernameSearchDialog(View v)
{
FragmentManager fragmentManager = getFragmentManager();
DialogFragment newFragment = new AddFriendDialogFragment();
newFragment.show(fragmentManager, "AddFriendDialog");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的所有对话框片段设置为在我的应用中看起来相同.来自我的设置片段的对话框完全按照我想要的方式设置样式.对于我的自定义对话框片段,样式类似但不完全相同.出于某种原因,我的自定义对话框片段中的微调器,timepicker,datepicker,radiobuttons和edittext小部件不会选择相同的样式.事实上,小部件融入了白色背景,你无法看到它们在那里.我究竟做错了什么?
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"/>
<style name="Theme.Base" parent="AppTheme">
<item name="colorPrimary">@color/PrimaryBackgroundColor</item>
<item name="colorPrimaryDark">@color/SecondaryBackgroundColor</item>
<item name="colorAccent">@color/ColorBackgroundAccent</item>
<item name="android:textColorPrimary">@color/PrimaryTextColor</item>
<item name="android:alertDialogTheme">@style/AppTheme.DialogStyle</item>
</style>
<style name="AppTheme.DialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:textColorPrimary">@color/PrimaryBackgroundColor</item>
<item name="colorAccent">@color/ColorBackgroundAccent</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我正在将主题应用于我的自定义对话框片段,如下所示:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_DialogStyle);
Run Code Online (Sandbox Code Playgroud)
我的设置对话框看起来像这样(我正是我想要的):
我的自定义对话框片段如下所示:
如您所见,单选按钮选择了红色,您无法看到未选中的单选按钮.
我正在尝试BottomSheetDialogFragment构建一个模态底页,但正如您在屏幕截图中看到的那样,它不是在导航栏后面向上滑动,而是在它的前面.这是向上滑动的方向.当它完全启动时,它位于导航栏上方.但它出现时看起来很难看.
知道如何解决这个问题吗?
BottomSheet类代码:
public class ExampleBottomSheetDialog extends BottomSheetDialogFragment {
private BottomSheetListener mListener;
public interface BottomSheetListener {
void onButton1Clicked();
void onButton2Clicked();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
mListener = (BottomSheetListener) context;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.bottom_sheet_layout, container);
Button button1 = v.findViewById(R.id.button1);
Button button2 = v.findViewById(R.id.button2);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onButton1Clicked();
dismiss();
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我使用DialogFragment (onCreateDialog)和ViewModel。但是,当我尝试使用getViewLifecycleOwner()传递observe()方法时,出现如下错误:
java.lang.IllegalStateException: Can't access the Fragment View's LifecycleOwner when getView() is null i.e., before onCreateView() or after onDestroyView().
Run Code Online (Sandbox Code Playgroud)
是否可以在DialogFragment中使用getViewLifecycleOwner()?
我正在使用自定义的DialogFragment.在该onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)方法中,我膨胀了包含另一个片段的布局,导致应用程序崩溃.我该如何解决?
单击我的(Scherlock)FragmentActivity中的EditText字段时,将显示DatePicker.选择日期并单击"应用"后,将使用日期填充Edittext字段.这可以正常工作,直到我在DatePicker可见时旋转屏幕.它的onCreateDialog方法再次启动,一切看起来都正确.但是,当我单击"应用"时,EditText字段中没有填写任何日期.
这很可能是因为我没有设法保留听众.这个问题与DialogFragment非常相似- 在屏幕旋转后保留监听器但是在我的代码中我有一个DialogFragment中包含的监听器接口,我无法通过调用FragmentActivity来达到监听器,(正如解决方案在上述问题中所建议的那样).
请帮助我,这真的不应该那么难,但我一直在使用它的时间比我承认的还要长......
这是DialogFragment代码:
public class DateDialogFragment extends SherlockDialogFragment {
public static String TAG = "DateDialogFragment";
static Context mContext;
static int mYear;
static int mMonth;
static int mDay;
static DateDialogFragmentListener mListener;
public static DateDialogFragment newInstance(Context context, DateDialogFragmentListener listener, Calendar now) {
DateDialogFragment dialog = new DateDialogFragment();
mContext = context;
mListener = listener;
mYear = now.get(Calendar.YEAR);
mMonth = now.get(Calendar.MONTH);
mDay = now.get(Calendar.DAY_OF_MONTH);
return dialog;
}
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new DatePickerDialog(mContext, mDateSetListener, …Run Code Online (Sandbox Code Playgroud) android listener orientation-changes android-dialogfragment dialogfragment
我在recyelerview.viewholder类的onClick()方法中尝试了如下.
示例中使用的SampleDialogFragment扩展了DialogFragment.
@Override
public void onClick(View v)
{
SampleDialogFragment df= new SampleDialogFragment();
df.show(v.getContext().getSupportFragmentManager(), "Dialog");
}
Run Code Online (Sandbox Code Playgroud)
我正面临着问题v.getContext().getSupportFragmentManager().我无法调用getSupportFragmentManager().
我也试过如下.
@Override
public void onClick(View v)
{
SampleDialogFragment df= new SampleDialogFragment();
SampleActivity activity = new SampleActivity();
df.show(activity.getSupportFragmentManager(), "Dialog");
}
Run Code Online (Sandbox Code Playgroud)
SampleActivity是回收器视图附加的活动.它没有显示错误.当我运行应用程序并崩溃.
日志显示活动已经破坏.
有解决方案吗
android android-dialogfragment dialogfragment android-recyclerview
正如您在图像中看到的,红色边框矩形是父活动。蓝色的是对话片段。圆圈表示视图,下面的矩形表示描述。我希望将圆圈上的点击传递给按钮。到目前为止,我已经尝试过 1. 在 Circle View 中重写 onTouchEvent 并返回 false 2. 在 Circle View 上 setOntouchListener 并调用 Activity.dispatchTouchListener 并返回 false 3. 将对话框片段和圆形视图标记为可点击/可聚焦 false。
以上似乎都没有调用下面按钮的 onCLickListener 。我可以看到在 Activity 的 onIterceptTouch() 中接收到触摸事件。请帮忙
活动
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
val viewTreeObserver = button2.viewTreeObserver
viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {MainFragment.newInstance(button2).show(supportFragmentManager, "dialog")
button1.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})
container.setOnClickListener {
Log.d("Test","Activity clicked")
}
button.setOnClickListener {
Log.d("Test","Button Clicked")
}
}
override fun onTouchEvent(event: MotionEvent?): Boolean {
Log.d("Test","Activity onTouchEvent")
return super.onTouchEvent(event)
} …Run Code Online (Sandbox Code Playgroud) android android-fragments android-dialogfragment kotlin dialogfragment
我有一个 DialogFragment,其中有一个侦听器,用于监听单击按钮以调用片段中的函数时的情况。
lateinit property listener has not been initialized当我点击肯定按钮时,我得到了。
对话框片段
class CreateCollectionDialog: DialogFragment() {
lateinit var listener: CreateCollectionDialogListener
interface CreateCollectionDialogListener {
fun onDialogPositiveClick(dialog: DialogFragment, collectionName: String)
// fun onDialogNegativeClick(dialog: DialogFragment)
}
override fun onAttachFragment(childFragment: Fragment) {
println("onAttachFragment")
super.onAttachFragment(childFragment)
listener = context as CreateCollectionDialogListener
println(listener)
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
val builder = AlertDialog.Builder(it)
val inflater = requireActivity().layoutInflater
builder.setView(inflater.inflate(R.layout.dialog_collection, null))
.setPositiveButton("Create", DialogInterface.OnClickListener { dialog, id ->
// Create new collection
var newCollectionName = view?.findViewById<EditText>(R.id.newCollectionName)?.text.toString()
if …Run Code Online (Sandbox Code Playgroud) android ×10
dialogfragment ×10
kotlin ×2
bottom-sheet ×1
dialog ×1
java ×1
listener ×1
styling ×1
viewmodel ×1