gpt4 book ai didi

java - Android:在对话框中找到一个按钮

转载 作者:行者123 更新时间:2023-11-30 02:39:50 24 4
gpt4 key购买 nike

我有一个由我的 MainActivity 调用的 Dialog。在这个对话框中有一个自定义按钮。当我尝试使用

在我的 MainActivity 中获取该按钮时
Button createDateButton = (Button) findViewById(R.id.create_date_button);

始终为 Null(因此稍后我得到一个 Nullpointer 异常)。我认为这与对话框内的按钮有关...

对话框扩展了 DialogFragment。它在运行时在 MainActivity 内部调用,作为对另一个 Button 的 react 。如果您需要更多信息,请告诉我

下面是一些代码:

MainActivity(部分,因为它有 200 多行)

public class MainActivity extends Activity implements UseDateInParentActivityInterface
{
FragmentManager fragmentManager = getFragmentManager();

CreateDialogFragment createDialogFragment;
DialogFragment datePicker;


@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

homeFragment = new HomeFragment();

fragmentManager.beginTransaction().add(R.id.mainFrame, homeFragment).commit();
findViewById(R.id.bottomButton_home).setBackgroundResource(R.drawable.ic_home);
}

public void openCreate(View view)
{
createDialogFragment = new CreateDialogFragment();
createDialogFragment.show(fragmentManager, "TEST");

updateSelectedButton(3);
}


public void pickDate(View v)
{
datePicker = new DatePickerFragment();
datePicker.show(getFragmentManager(), String.format(getResources().getString(R.string.pickDate)));
}

public void dateForWhatever(int year, int month, int day)
{
DateFormatter dateFormatter = new DateFormatter();
String date = dateFormatter.toStringDE(year, month, day);

Button createDateButton = (Button) findViewById(R.id.create_date_button);
if (createDateButton != null)
{
createDateButton.setText(date);
}
else
{
System.out.println("bloeder Button ist gleich null");
}
}
}

这是 DialogFragment Java 类

public class CreateDialogFragment extends DialogFragment
{
@Override
public Dialog onCreateDialog(Bundle savedInstance)
{
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater layoutInflater = getActivity().getLayoutInflater();

builder.setView(layoutInflater.inflate(R.layout.dialog_create, null))
.setMessage(R.string.create)
.setPositiveButton(R.string.create, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialogInterface, int i)
{}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialogInterface, int i)
{}
});

return builder.create();
}
}

对话框 xml.File

<?xml version="1.0" encoding = "utf-8"?>
<RelativeLayout
xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android:id = "@+id/dialog_create"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:background="@color/create_bg_1"
tools:context = ".CreateDialogFragment"
>

<Button
android:layout_width = "wrap_content"
android:layout_height = "@dimen/textFieldHight"
android:ems = "6"
android:text = "@string/date"
android:background="@color/white"
android:id = "@+id/create_date_button"
android:onClick = "pickDate"
android:layout_below = "@id/dialog_create_name"
/>


</RelativeLayout>

约翰

最佳答案

在您的 CreateDialogFragment 中,修改您的 onCreateDialog():

@Override
public Dialog onCreateDialog(Bundle savedInstance)
{
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater layoutInflater = getActivity().getLayoutInflater();
View root = layoutInflater.inflate(R.layout.dialog_create, null);

builder.setView(root).setMessage(R.string.create);
// ...

Button createDateBtn = (Button) root.findViewById(R.id.create_date_button);
// set click listener here ...

return builder.create();
}

问题是按钮在 Dialog 的 View 层次结构中,而不是在 Activity 的 View 层次结构中。如果您从 Activity 中调用 findViewById(),您将始终得到 null:层次结构存在于两个不同的窗口中。

此代码段获取对话框中按钮的句柄。它调用 findViewById() 从对话框的 Root View (不是 Activity)并检索按钮。然后你可以把它保存到一个引用中以备后用,或者直接在那里设置一个点击监听器。在此监听器中,您可以编写自己的逻辑,例如调用 Activity 的方法。

关于java - Android:在对话框中找到一个按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25951523/

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