0

私は 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

それで、問題は何ですか??

4

0 に答える 0