gpt4 book ai didi

java - Android Master/Detail 流程 - 在 Activity 中操作 Detail fragment View

转载 作者:行者123 更新时间:2023-12-01 15:00:30 25 4
gpt4 key购买 nike

所以我是 Android 开发的新手,并试图了解主/细节流程设计。因此,我使用 Eclipse 为您创建的默认类 - 因此 ScreenDetailActivityScreenDetailFragmentScreenListActivityScreenListFragment.我的一个详细信息 fragment 使用的布局包含一系列用于输入数据的检查和字段,以及一个按钮,该按钮应该使使用 fragment 的 Activity 类将该数据传递给计算器类,然后计算器类使用数据。例如,在相关详细信息 fragment 之一使用的 calculation_layout.xml 文件中找到:

<EditText android:id="@+id/edit_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="numberDecimal|numberSigned"
android:hint="@string/background_value" />

<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_singleCalc"
android:onClick="calculate" />

我认为按钮的 calculate 功能可以正常工作(即,当计算为空或执行一些琐碎的事情时,应用程序不会崩溃);它在 ScreenListActivityScreenDetailActivity 中实现,因为两者都可以使用该 fragment 。

但是,每当我尝试访问详细信息 fragment 中的 EditText 对象时,应用程序就会崩溃。我正在尝试这样的事情:

public void calculate(View view){
//Retrieve all the information, and set the values in the Calculator
EditText editText = (EditText) findViewById(R.id.edit_value);
String number = editText.getText().toString();
double angle = Double.parseDouble(number);

Calculator.longCalc();
}

像这样在我的 ScreenDetailFragment 中膨胀布局,与 Eclipse 生成的默认方法的工作原理没有什么不同(其中 mItem 基本上是一个小类的实例,包含应显示哪个 fragment 的信息):

public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// The returned view
View rootView;
// If mItem is non-null...
if (mItem != null) {
if (mItem.title == "Calculation") {
// If the title is Calculation, use the calculation layout
rootView = inflater.inflate(R.layout.calculation_layout, container, false);
} else {
// Otherwise, show the dummy content as text in a TextView
rootView = inflater.inflate(R.layout.fragment_screen_detail, container, false);
((TextView) rootView.findViewById(R.id.screen_detail)).setText(mItem.title);
}
} else {
rootView = inflater.inflate(R.layout.fragment_screen_detail, container, false);
}

return rootView;
}

如前所述,结果是崩溃。

我认为我应该做的是以某种方式从 Activity 访问 rootView,但我真的不知道如何安全有效地做到这一点。

有人可以给我一些指示吗?

更新:

我尝试实现 OnClickListener,在特定布局膨胀时进行设置:

((Button)rootView.findViewById(R.id.button_calc)).setOnClickListener(this);

并实现 onClick(View) 函数,如下所示:

public void onClick(View view) {
//Retrieve all the information, and set the values in the Calculator
view = (View) view.getParent();
EditText editText = (EditText) layout.findViewById(R.id.edit_phiD);
String number = editText.getText().toString();

Calculator.angle = Double.parseDouble(number) * 2.0 * Math.PI/360.0;

Calculator.longCalc();
}

但是,错误仍然存​​在。如果我将 ViewParent 重新转换为 LinearLayoutViewGroup,或者直接使用 view,它也会持续存在是来了。需要明确的是,我试图获取所单击按钮的父布局,以便我可以返回到该布局的其他子Views并访问它们的状态。

最佳答案

您无需完成您的 Activity 即可实现此目标。删除 onclick 行并为布局中的按钮添加 id:

<Button android:id="@+id/calc_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_singleCalc" />

然后,只需将 OnClickListener 添加到 fragment 中的按钮即可。类似这样的事情:

private View mRootView;
private EditText mEditText;

public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// If mItem is non-null...
if (mItem != null) {
if (mItem.title == "Calculation") {
// If the title is Calculation, use the calculation layout
mRootView = inflater.inflate(R.layout.calculation_layout, container, false);
mEditText = (EditText) mRootView.findViewById(R.id.edit_phiD);
((Button)mRootView.findViewById(R.id.calc_button)).setOnClickListener(this);
} else {
// Otherwise, show the dummy content as text in a TextView
mRootView = inflater.inflate(R.layout.fragment_screen_detail, container, false);
((TextView) mRootView .findViewById(R.id.screen_detail)).setText(mItem.title);
}
} else {
mRootView = inflater.inflate(R.layout.fragment_screen_detail, container, false);
}

return mRootView;
}

(您的 fragment 需要为此实现 OnClickListener)。然后您将在 Fragment 上收到回调,这就是您在那里执行的操作:

public void onClick(View v){
//Retrieve all the information, and set the values in the Calculator
String number = mEditText.getText().toString();
double angle = Double.parseDouble(number);

Calculator.longCalc();
}

关于java - Android Master/Detail 流程 - 在 Activity 中操作 Detail fragment View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13722867/

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