フラグメントを使用してアプリを開発していますが、フラグメントの 1 つに ImageButton があります。EditText に入力した内容を保存するかどうかをユーザーに尋ね、Enter キーを押した場合はそれを SQLiteDatabase に保存することになっています。onKeyDown をオーバーライドする必要がないことを除いて、この Fragment が Activity の場合、これはすべて正常に機能しました。Fragment に移動したので、ImageButton は何もしません。私は何が欠けていますか?コードは次のとおりです。
<EditText
android:id="@+id/stitchnotes"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="left"
android:hint="@string/hint"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@android:color/white"
android:inputType="text" />
<ImageButton
android:id="@+id/savebutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/video_content_description"
android:src="@drawable/actions_file_save_as_icon" />
ここからの手法を使用して、フラグメント アクティビティを拡張するアクティビティの onKeyDown メソッドをオーバーライドしています。
public class StitchList extends FragmentActivity {
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
super.onKeyDown(keyCode, event);
DetailFrag frag = new DetailFrag();
frag.onKeyDown(keyCode, event);
return false;
}
次に、フラグメントで onKeyDown を定義します。
public class DetailFrag extends Fragment {
public static boolean Edited = false;
public AlertDialog.Builder builder;
public AlertDialog alert;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.detailfragment, container, false);
Typeface font = Typeface.createFromAsset(getActivity().getAssets(),
"danielbk.ttf");
builder = new AlertDialog.Builder(getActivity());
builder.setMessage("Do you want to save your Notes?");
builder.setCancelable(false);
builder.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.setNegativeButton("No",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
getActivity().finish();
}
});
alert = builder.create();
final EditText notes = (EditText)view.findViewById(R.id.stitchnotes);
notes.setTypeface(font);
notes.setTextSize(12);
ImageButton savebutton = (ImageButton)view.findViewById(R.id.savebutton);
savebutton.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
String Notes = notes.getText().toString();
Uri updateUri = ContentUris.withAppendedId(STITCHES_URI, rowID);
ContentValues values = new ContentValues();
values.put("stitchnotes", Notes);
getActivity().getContentResolver().update(updateUri,values,null,null);
}
});
notes.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
Edited = true;
}
});
return view;
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0
&& Edited) {
alert.show();
return true;
}
else
return false;
}