だから私はAndroid開発に不慣れで、マスター/ディテールフローデザインに頭を悩ませようとしています。そのため、私はEclipseが作成するデフォルトのクラスを使用しています-つまりScreenDetailActivity
、、、、および。私の詳細フラグメントの1つは、データを入力するための一連のチェックとフィールドを含むレイアウトを使用し、フラグメントを使用してActivityクラスがそのデータを計算機クラスに渡すようになっているボタンを使用します。計算機クラスは、データ。たとえば、問題の詳細フラグメントの1つで使用されているファイルにあります。ScreenDetailFragment
ScreenListActivity
ScreenListFragment
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
、それらの状態にアクセスできるようになります。