0

ListFragment에 ListView를 만들고 있는데 동적으로 채워지는 중입니다. 얼마나 많은 항목이 거기에있게 될지 실감이 없습니다. 이제 하나의 버튼을 클릭하여이 텍스트를 저장하기 위해 사용자가 ListView의 각 항목에 대한 EditTexts 텍스트를 설정해야합니다. 내 질문은, 어떻게 레이아웃에서 단 하나의 EditText 사실 때 각 항목의 EditText 가리킬 수 있습니다. 내 코드는 첫 번째 EditText 텍스트를 목록에 저장합니다. 누구나 아이디어가 있습니까? 미안 해요! 나는 안드로이드에 처음 익숙하다.안드로이드의 ListView에서 동적으로 생성되는 EditText 요소를 어떻게 가리킬 수 있습니까?

@Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     final ViewHolder viewHolder; 
     // General ListView optimization code. 
     if (view == null) { 
      view = mInflater.inflate(R.layout.listitem_device, null); 
      viewHolder = new ViewHolder(); 
      viewHolder.deviceAddress = (TextView) view.findViewById(R.id.device_address); 
      viewHolder.deviceName = (EditText) view.findViewById(R.id.device_name); 
      view.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) view.getTag(); 
     } 

     BluetoothDevice device = mLeDevices.get(i); 
     viewHolder.deviceAddress.setText(device.getAddress()); 

     saveNode.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       for (int j = 0; j < mLeDeviceListAdapter.getCount() ; j++) { 
        String name = viewHolder.deviceName.getText().toString(); 
        String address = viewHolder.deviceAddress.getText().toString(); 
        handler = new DataHandler(getActivity().getBaseContext()); 
        handler.open(); 
        handler.insertNode(address, name); 
        Toast.makeText(getActivity().getBaseContext(), "Node " + name + " inserted", Toast.LENGTH_LONG).show(); 
        handler.close(); 
       } 
      } 
     }); 

     return view; 
    } 
+0

을하지만 캔트 당신이 찾고있는 것을 알아낼 에 대한. 더 자세하게 얘기해 주 시겠어요? 목록 항목에 EditText를 추가하고 있습니까? –

+0

의견을 보내 주셔서 감사합니다, Eugene! 모든 목록 항목에 EditText가있는 목록보기가 실제로 있습니다. 이러한 목록 항목은 내가 스캔하는 블루투스 장치입니다. 이제 사용자가 목록에 표시된 각 장치에 대해 자신이 선택한 이름을 쓰고 "저장"버튼 하나를 클릭하여이 모든 이름을 저장해야합니다. 그러나, 어떻게 listview에서 모든 editText에 대해 editText.getText()를 사용할 수 있습니까?! 나는 어댑터를 사용하고 있으며 레이아웃에서 하나의 editText를 반복하고 있으며, EditText id는 listView의 첫 번째 요소를 참조 할뿐 모든 요소를 ​​참조하지는 않습니다! –

+0

죄송합니다. 조금 늦었습니다. 나는 그것을 볼 것이다 –

답변

0

실제로 getView()에는 button onClick 메서드가 없어야합니다.

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    rootView = inflater.inflate(R.layout.scan_activity, container, false); 

    mHandler = new Handler(); 
    saveNode = (Button) rootView.findViewById(R.id.save_node_button); 

    saveNode.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      for (int j = 0; j < mLeDeviceListAdapter.getCount() ; j++) { 

       int wantedPosition = j; // Whatever position you're looking for 
       int firstPosition = mLeDeviceListView.getFirstVisiblePosition() - mLeDeviceListView.getHeaderViewsCount(); // This is the same as child #0 
       int wantedChild = wantedPosition - firstPosition; 
       // Say, first visible position is 8, you want position 10, wantedChild will now be 2 
       // So that means your view is child #2 in the ViewGroup: 
       if (wantedChild < 0 || wantedChild >= mLeDeviceListView.getChildCount()) { 
        //Log.w(TAG, "Unable to get view for desired position, because it's not being displayed on screen."); 
        return; 
       } 
       // Could also check if wantedPosition is between listView.getFirstVisiblePosition() and listView.getLastVisiblePosition() instead. 
       View wantedView = mLeDeviceListView.getChildAt(wantedChild); 

       nodeName = (EditText) wantedView.findViewById(R.id.device_name); 
       nodeAddress = (TextView) wantedView.findViewById(R.id.device_address); 

       name = nodeName.getText().toString(); 
       address = nodeAddress.getText().toString(); 

       handler = new DataHandler(getActivity().getBaseContext()); 
       handler.open(); 
       handler.insertNode(address, name); 
       Toast.makeText(getActivity().getBaseContext(), "Node " + name + " inserted", Toast.LENGTH_LONG).show(); 
       handler.close(); 
      } 
     } 
    }); 
    return rootView; 
} 

그리고의 getView() 함수는 다음과 같아야합니다 : 그것은 여기처럼에서 onCreate에 있어야 난 당신의 질문을 이해하려고

@Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     final ViewHolder viewHolder; 
     // General ListView optimization code. 
     if (view == null) { 
      view = mInflater.inflate(R.layout.listitem_device, null); 
      viewHolder = new ViewHolder(); 
      viewHolder.deviceAddress = (TextView) view.findViewById(R.id.device_address); 
      viewHolder.deviceName = (EditText) view.findViewById(R.id.device_name); 
      view.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) view.getTag(); 
     } 

     BluetoothDevice device = mLeDevices.get(i); 
     viewHolder.deviceAddress.setText(device.getAddress()); 
     return view; 
    }