私のプログラムは、GoogleのHelloギャラリーの例に基づいています-clicked際ギャラリーでEditTextsは奇妙な挙動を示す:
http://developer.android.com/guide/tutorials/views/hello-gallery.html
の代わりに画像を使用して、私はコンストラクタでEditText
Sの束を作成します。Androidの(長い)という
私の質問は今です:EditTextを長くクリックすると、コンテキストメニュー(「すべて選択」、「コピー」など)が表示されます。 (それはところで、私はここに私の質問を掲示した理由だ - [OK]を、1つはお粗末だった。)私はmyGallery.getAdapter().getView(position, ...).showContextMenu()
を経由して、選択したビューを呼び出しOnItemLongClickListener
を設定しようとしたが、それは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)
IをまたregisterForContextMenu()
にGallery
を試してから、EditTexts
を入力してください。両方が失敗しました。あなたの誰かが解決策を持っていますか?
Btwでは、ギャラリーにいくつかの奇妙な動作が表示されます。アプリケーションが起動すると、最初のEditText
は中央に配置されますが、タップすると編集できません。しかし、私が2番目のもの(中心にない)をタップすると、それを中央に置かずに編集することができます。私が中心を第2のEditText
の中心に置くと、私は第3のものだけを編集することができます。私が最後のものを中央に置くと、フォーカスは完全に消滅し、もう何も編集することはできません。
あなたが私を助けることができるなら、私はおそらくあなたと結婚します。どんな助けもありがとうございます。そして、私を信じてください - 私はこの質問をする前に多くの研究をしました。本当に。
どうもありがとう
m1ntf4n
EDITここ
は、私の活動のコードです。ダブルポストに申し訳ありません、編集の可能性を考慮に入れなかった。 Googleのドキュメントから
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];
}
}
}
スタックトレースの一部を単にポストするのではなく、関連するコードを投稿することもできますか?特に、私はどこでregisterForContextMenu()を呼び出し、どこでonCreateContextMenu()をオーバーライドするかを見たいと思っています。 – glorifiedHacker
ええと、私はonCreateContextMenuをオーバーライドしません。私はこれがギャラリーの中にないEditTextのためではないので、これは必要ではないと考えました。これは問題ですか? – m1ntf4n
それは確かに問題の一部ですが、私はそれがすべての問題であると確信することはできません。私は以下のGoogleの文書から引用を引用して説明しました。 – glorifiedHacker