私は奇妙な動作に遭遇していますが、私はバグを疑いますが、おそらく私は何かを見落としています。ポストの最後にコードスニペット。 .xmlも投稿できますが、この問題を理解する必要はないと思います。EditText setText()は複数のEditTextビューにテキストを設定します
私は、プレーヤの数に基づいてTableLayoutsを追加する水平線形レイアウトを持っています。
テーブルレイアウトいくつかのフィールドを含む、のTextView、のEditText、ボタン等
Iは各TableLayoutを初期化するときに、私は(XML膨張を介して)のLinearLayoutに追加した後のフィールドをintialize。
ところで、EditTextフィールドは常に最新のプレイヤー情報で更新されます。私が知ることから、setTextの呼び出しはすべてのEditTextに渡されています。
私は親TableLayout(のTableRowがあるので、実際に祖父母にfindViewByIdを使用してのEditTextを見つけています。
のEditTextのidのは、木全体で一意ではありませんが、テーブルのレイアウトの観点からユニークである。
考えられる理由: 1)findByIdのときにEditText Viewが間違っています。これはできません。 EditTextViewのobjectIDをポストするようにコードを変更しました。私はTEXTVIEWを取得し、ユニークなオブジェクトIDを取得します。正確に同じmyEditText.toString()をEditTextにポストして、最後に使用したオブジェクトIDの繰り返し値を取得します。繰り返すには、フィールドがTextViewの場合は常に正確に同じfindViewロジックを使用し、EditTextであればいつでも "複数の" setTextビヘイビアを表示します。
2)フィールドをEditTextからxmlのTextViewに変更し、単に私のキャストをEditTextからTextViewに変更すると、すべてが期待どおりに動作します。
3)私のonClickListenersで行われた同様の検索は、期待どおりに動作します。
4)私は初期化と後に同じ動作をする前に線形レイアウトにビューを追加しようとしました。私はそれがリスナーで働いて以来、基本的なオブジェクトの操作のものだったのだろうかと思っていたが、私はまだ何かが欠けている。
質問: 1)これは他の誰かにバグのようですか? 2)推奨される回避策?
3)私のトップレベルのオブジェクトを検索しているときにリスナーでどのように動作するのか(トップレベルオブジェクトは私が膨らませたTableLayoutになっています)
コードスニペット:
のonCreate使う初期コード:
TableLayout tl = (TableLayout)inflater.inflate(R.layout.playerpanel, llayout, false);
InitializePlayer(player1,tl);
llayout.addView(tl);
InitializePlayerスニペット - 物事が壊れる:
public void InitializePlayer(Player p, TableLayout tl)
{
players.add(p);
tl.setTag(p);
//INITIALIZE LISTENERS HERE - SNIPPED FOR READABILITY
TextView scoreLabel = (TextView)tl.findViewById(R.id.currentScore);
EditText curPoints = (EditText)tl.findViewById(R.id.scoreEntry);
curPoints.setText(p.getScore());
EditText playerEntry = (EditText)tl.findViewById(R.id.playerName);
playerEntry.setText(tl.toString());
//CONFIRMING UNIQUE OBJECTS HERE should actually be p.getScore()
scoreLabel.setText(playerEntry.toString());
ListView lv = (ListView)tl.findViewById(R.id.listView);
lv.setAdapter(new ArrayAdapter<String>(this,R.layout.list_item, p.getTurns()));
作業を行う
OnClickCode:デバイスが向きを変えたときに
private OnClickListener addButtonListener = new OnClickListener() {
public void onClick(View v) {
// get all the objects I care about
TableRow tr = (TableRow)v.getParent();
TableLayout tl = (TableLayout)tr.getParent();
EditText ev = (EditText)tl.findViewById(R.id.scoreEntry);
Player pl = (Player)tl.getTag();
TextView scoreLabel = (TextView)tl.findViewById(R.id.currentScore);
pl.addScore(ev.getText().toString());
scoreLabel.setText(pl.getScore());
ListView lv = (ListView)tl.findViewById(R.id.listView);
ArrayAdapter aa = (ArrayAdapter)lv.getAdapter();
aa.notifyDataSetChanged();
InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
EditText playerEntry = (EditText)tl.findViewById(R.id.playerName);
playerEntry.setText(playerEntry.toString());
}
};
あなたは私の日を救った!どうもありがとうございます –