私は ListFragment を使用しており、このフラグメント内と onCreate 関数でカスタムカーソルアダプターを使用しています。これは、レイアウトを特定の回数繰り返します。レイアウトにはいくつかの要素が含まれており、そのうちの 1 つは EditText であり、これらを処理する必要があります。 EditText(s) later . このアダプター内で、このように EditText の id を動的に変更しています
//get EditText and give it the same id of dish
EditText noteEditText = (EditText) v.findViewById(R.id.editTextNote);
if (noteEditText != null){
int record_ID_int = Integer.parseInt(record_ID);
noteEditText.setId(record_ID_int);
noteEditText.setText(""+record_ID_int);
EditText tempEditText = (EditText) v.findViewById(record_ID_int);
if (tempEditText != null){
tempEditText.setText(""+record_ID_int);
Log.e("layout"," tempEditText is Not Not null after retriveing it by id :"+record_ID_int);
}else{
Log.e("layout"," tempEditText is null null null by id :"+record_ID_int);
}
}
editTextNote は、ご覧のとおり、レイアウトに設定されている静的 ID です。ID を変更する以外に別の操作を実行しています。テキストも設定しているので、操作がうまくいっていることを確認できます。アプリを実行すると、テキストが正しく設定されていることがわかります。そして、cursor adapter のこのブロック内で、レイアウト (v) は、渡されたばかりの ID で findViewById を呼び出すことにより、EditText を取得できます。
しかし、同じIDを渡してこれらのEditTextを取得しようとすると、nullが返されます!!! EditText を取得するコードを、関数 onStart() の同じフラグメントに入れます。注:: EditText に設定した ID を SharedPreference に保存したので、次のコードでは ID を SharedPreference から取得し、それらを関数 findViewById に渡して、取得に必要な EditText コードを取得します。 editText コンポーネントは次のとおりです。
LayoutInflater inflater = getActivity(). getLayoutInflater();
View myLayout =inflater.inflate(R.layout.display_order_list_layout, null, false);
View parentView =(View) myLayout.getRootView();
if (myLayout != null){
//1::get sharedPrefNotes from my classes
ManageOrder manageOrder = new ManageOrder(getActivity());
int [] keysNotesArray = manageOrder.getAllSharedPreferenceNoteKeys();
//below just a test to see it the layout can get other per-definned id's elements in layout
TextView textView = (TextView) myLayout.findViewById(R.id.textViewTotalPriceThisDishStr);
if (textView != null ){
Log.e("layout","textView with id : textViewTotalPriceThisDishStr| text is : "+textView.getText());
}else {
Log.e("layout","textView is null ,id textViewTotalPriceThisDishStr");
}
for (int i = 0 ; i<keysNotesArray.length; i++){
int key_id = keysNotesArray[i];
//2::find item by id
EditText noteEditText = (EditText) myLayout.findViewById(key_id);
if (noteEditText != null ){
Log.e("layout","EditText with id :"+key_id +"| text is : "+noteEditText.getText());
}else {
Log.e("layout","EditText is null od id "+key_id);
}
}
}else {
Log.e("layout","myLayout is null ");
}
ログファイルには次の結果が表示されます
05-07 19:41:25.584: E/layout(5002): 114:
05-07 19:41:25.584: E/layout(5002): 95:
05-07 19:41:25.584: E/layout(5002): 75:
05-07 19:41:25.584: E/layout(5002): 123:
05-07 19:41:25.585: E/layout(5002): textView with id : textViewTotalPriceThisDishStr| text is : الاجمالي
05-07 19:41:25.585: E/layout(5002): EditText is null , id 114
05-07 19:41:25.586: E/layout(5002): EditText is null , id 95
05-07 19:41:25.586: E/layout(5002): EditText is null , id 75
05-07 19:41:25.586: E/layout(5002): EditText is null , id 123
それで、問題は何ですか??