моя программа основана на примере Google Gallery:
http://developer.android.com/guide/tutorials/views/hello-gallery.html
Вместо использования изображений я создаю группу EditText
s в конструкторе.
Myвопрос теперь: когда я долго нажимаю на EditText, я хочу, чтобы его контекстное меню (с «выбрать все», «копировать» и так далее), чтобы было показаноЯ попытался установить OnItemLongClickListener
, который вызывает выбранное представление с помощью myGallery.getAdapter().getView(position, ...).showContextMenu()
, но это приводит к StackOverflowError
(это причина, по которой я разместил здесь свой вопрос - хорошо, этот вопрос был хромым):
08-13 16:02:36.062: ERROR/AndroidRuntime(3400): FATAL EXCEPTION: main
java.lang.StackOverflowError
at android.widget.AdapterView.getPositionForView(AdapterView.java:581)
at android.widget.Gallery.showContextMenuForChild(Gallery.java:1049)
at android.view.View.showContextMenu(View.java:2520)
at de.test.gallery2.Main$1.onItemLongClick(Main.java:51)
at android.widget.Gallery.dispatchLongPress(Gallery.java:1074)
at android.widget.Gallery.showContextMenuForChild(Gallery.java:1055)
Я также пытался registerForContextMenu()
Gallery
, затем EditTexts
, а затем оба, но все не удалось.У кого-нибудь из вас есть решение?
Кстати, Галерея показывает другое странное поведение: при запуске приложения первый EditText
центрируется, но не может быть отредактирован, когда я нажимаю на него,Но когда я нажимаю на второй (который не центрирован), я могу редактировать тот, который не центрирован.Когда я центрирую второй EditText
, я могу редактировать только третий и так далее.Когда я центрирую последний, фокус, кажется, полностью исчезает, и ничто больше не может быть отредактировано.
Я, вероятно, выйду за вас замуж, если вы сможете мне помочь.Любая помощь приветствуется.И поверьте мне - я провел много исследований, прежде чем задавать этот вопрос.Действительно.
Большое спасибо
m1ntf4n
РЕДАКТИРОВАТЬ
Вот код моей активности.Извините за двойной пост, возможность редактирования не учитывалась.
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Gallery gallery = (Gallery) findViewById(R.id.gallery);
gallery.setAdapter(new LocalAdapter(this));
gallery.setSpacing(50);
registerForContextMenu(gallery);
//Register the EditViews for ContextMenu.
for(int i = 0; i < gallery.getAdapter().getCount(); ++i) {
registerForContextMenu(gallery.getAdapter().getView(i, null, null));
}
//This listener will cause a StackOverflowError.
/*gallery.setOnItemLongClickListener(new Gallery.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> a, View v, int i, long l) {
return gallery.getAdapter().getView(i, null, null).showContextMenu();
}
});*/
}
public class LocalAdapter extends BaseAdapter {
private Context mContext;
private EditText[] editText;
public LocalAdapter(Context c) {
mContext = c;
editText = new EditText[5];
for(int i = 0; i != editText.length; ++i) {
editText[i] = new EditText(mContext);
editText[i].setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
editText[i].setText("TEXT " + i);
editText[i].setTextSize(30);
}
}
@Override
public int getCount() {
return editText.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return editText[position];
}
}
}