所以我是Android开发的新手,并试图围绕Master / Detail流程设计。因此,我使用Eclipse为您创建的默认类 - 所以ScreenDetailActivity
,ScreenDetailFragment
,ScreenListActivity
和ScreenListFragment
。我的一个Detail片段使用一个布局,其中包含一系列用于输入数据的检查和字段,以及一个应该使用片段将Activity类传递给计算器类的按钮,然后计算器类执行一些基本计算。数据。例如,在一个有问题的详细信息片段使用的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
功能正常工作(即当计算为空或琐碎的事情时,应用程序不会崩溃);它在ScreenListActivity
和ScreenDetailActivity
中实现,因为它们都可以使用该片段。
但是,每当我尝试访问Detail片段中的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基本上是一个包含有关哪个片段应该被置换的信息的小类的实例):
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;
}
如前所述,结果是崩溃。
我认为我应该做的是以某种方式从活动中访问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
重新设定为LinearLayout
,ViewGroup
,或者我直接使用view
,它也会持续存在。为了清楚起见,我试图了解单击按钮的父布局,以便我可以返回到该布局的另一个子Views
并访问其状态。
答案 0 :(得分:1)
您无需通过活动来实现此目的。删除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;
}
(您的片段需要为此实现OnClickListener)。然后你会在你的片段上得到一个回调,这就是你在那里做的事情:
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();
}
答案 1 :(得分:0)
https://developer.android.com/training/basics/fragments/index.html
这是最好的例子,有两个片段headlinesfragment和articlefragment与动态UI,按照他们如何在articlefragment上的界面,让我们选择哪个标题。正确地遵循教程。你应该理解它。