标签: dialogfragment

RelativeLayout对齐规则在DialogFragment中不起作用

我有一个关于对话框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)

android relativelayout dialogfragment

5
推荐指数
1
解决办法
1265
查看次数

没有看到EditNameDialogListener接口

我想将对话框片段中的用户类型字符串:"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)

java android android-dialogfragment dialogfragment

5
推荐指数
2
解决办法
347
查看次数

样式自定义对话框片段不起作用

我正在尝试将我的所有对话框片段设置为在我的应用中看起来相同.来自我的设置片段的对话框完全按照我想要的方式设置样式.对于我的自定义对话框片段,样式类似但不完全相同.出于某种原因,我的自定义对话框片段中的微调器,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)

我的设置对话框看起来像这样(我正是我想要的):

设置对话框片段

我的自定义对话框片段如下所示:

自定义对话框片段

如您所见,单选按钮选择了红色,您无法看到未选中的单选按钮.

android styling dialogfragment

5
推荐指数
1
解决办法
2893
查看次数

Modal BottomSheet面向导航栏

我正在尝试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)

android dialog dialogfragment bottom-sheet

5
推荐指数
0
解决办法
525
查看次数

DialogFragment中的getViewLifecycleOwner()导致崩溃

我使用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()?

android viewmodel dialogfragment android-livedata

5
推荐指数
4
解决办法
828
查看次数

Android - 包含片段的布局的DialogFragment

我正在使用自定义的DialogFragment.在该onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)方法中,我膨胀了包含另一个片段的布局,导致应用程序崩溃.我该如何解决?

android android-dialogfragment dialogfragment

4
推荐指数
1
解决办法
5645
查看次数

屏幕旋转后保留监听器 - 使用DatePicker的DialogFragment

单击我的(Scherlock)FragmentActivity中的EditText字段时,将显示DatePicker.选择日期并单击"应用"后,将使用日期填充Edittext字段.这可以正常工作,直到我在DatePicker可见时旋转屏幕.它的onCreateDialog方法再次启动,一切看起来都正确.但是,当我单击"应用"时,EditText字段中没有填写任何日期.

这很可能是因为我没有设法保留听众.这个问题与DialogFragment非常相似- 在屏幕旋转后保留监听器但是在我的代码中我有一个DialogFragment中包含的监听器接口,我无法通过调用FragmentActivity来达到监听器,(正如解决方案在上述问题中所建议的那样).

  • 我想不是,但有没有办法在活动被销毁之前保存一个监听器?(我对Manifest修改不感兴趣.)
  • 有没有办法修改这个DialogFragment,或者这个解决方案是否包含在这种情况下不适合的接口?

请帮助我,这真的不应该那么难,但我一直在使用它的时间比我承认的还要长......

这是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

4
推荐指数
1
解决办法
5555
查看次数

从扩展RecyclerView.ViewHolder的类启动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

4
推荐指数
1
解决办法
1823
查看次数

将触摸事件从对话框片段传递到正下方的视图(在父活动内)

我

正如您在图像中看到的,红色边框矩形是父活动。蓝色的是对话片段。圆圈表示视图,下面的矩形表示描述。我希望将圆圈上的点击传递给按钮。到目前为止,我已经尝试过 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

4
推荐指数
1
解决办法
2306
查看次数

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 kotlin dialogfragment

3
推荐指数
1
解决办法
1552
查看次数