多くのアイテムを含むリストビューを持つアプリを変更しています。アイテムを長押しすると、名前の変更、削除、その他のオプションを含むメニューが表示されます。この contextMenu には、固定テキストとアイテム名のような、アイテムから取得した文字列を使用したタイトルがあります (1 つの文字列として縮約します)。すべてがうまくいきます。
ただし、[名前の変更] をクリックすると、ダイアログが表示されます。ダイアログのタイトルは、上記と同じ文字列を使用して、dialog.setTitle() によって設定されます。しかし、文字列の長さが 20 未満のように十分に小さい場合は、うまく表示されます。しかし、長さが 30 以上のように長すぎる場合、文字列は表示されず、項目名のない固定テキストのみが表示されます。
アプリをトレースしたところ、タイトルを設定するときに文字列が同じであることがわかりました。しかし、表示は異なります。唯一の違いは、前者は ContextMenu.setHeaderTitle() を使用し、後者は Dialog.setTitle() を使用することです。渡したパラメーターは常に同じです。
メニューのタイトル コードは次のとおりです。
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
AdapterContextMenuInfo mi = (AdapterContextMenuInfo) menuInfo;
menu.add(0, CONTEXT_MENU_RENAME, 0, getString(R.string.preset_rename));
menu.add(0, CONTEXT_MENU_DELETE, 0, getString(R.string.preset_delete));
mItemId = mi.position;
// super.onCreateContextMenu(menu, v, menuInfo);
// Log.d(LOGTAG,"mItemId is :" + mItemId);
String titleName = "" + getString(R.string.station_name)+ "" +getNameFromId(mItemId);
Log.e(LOGTAG, "1. getNameFromId = " + titleName);
menu.setHeaderTitle(titleName);
}
ダイアログのタイトル コードは次のとおりです。
case DIALOG_RENAME_ID:
String titleName = "" + getString(R.string.station_name)+ "" + getNameFromId(mItemId);
Log.e(LOGTAG, "2. getNameFormId " + titleName);
mRenameDialog.setTitle(titleName); // Note: here set the dialog
final EditText editText = (EditText) mRenameDialog
.findViewById(R.id.name);
editText.setText(getNameFromId(mItemId));
Button bOk = (Button) mRenameDialog.findViewById(R.id.save);
bOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String rename = editText.getText().toString();
if (TextUtils.isEmpty(rename)) {
Context context = getApplicationContext();
Toast toast = Toast.makeText(context, getString(R.string.station_name_empty),
Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL, 0, 0);
toast.show();
} else {
saveStationName(mItemId,rename);
mRenameDialog.dismiss();
}
}
});
Button bCancel = (Button) mRenameDialog.findViewById(R.id.cancel);
bCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mRenameDialog.dismiss();
}
});
break;
誰かが理由を知ることができますか?そして、誰かがそれを説明して修正できますか?