2015-03-24 2 views
1

Я разрабатываю одно приложение, в котором у меня есть один список. В этой строке каждая строка имеет один текстовый просмотр и один файл автозаполнения. теперь то, что я хочу, - сделать этот файл autocompletetextview редактируемым. Если один раз, когда мой список заполнен некоторыми данными, я хочу отредактировать некоторые из autocompletetexviews, а затем отправить обновленные данные на сервер. Есть ли какое-либо решение для этого? Я потратил 2 дня на это, и мне нужно это очень срочно.Как создать редактируемый AutoCompleteTextview в Listview в android

вот мой метод getview() моего customAdapter. Я могу успешно заполнить данные в списке. И я добавил «addOnTextChangedListener» в autocomletetextview. но когда я отфильтровывал данные, он не может установить auotocompletetext, то есть autocomtextview.settext (filtersdata) не выполняет. Я получаю отфильтрованный текст в onTextChanged(). В моем коде я написал это, но я не знаю, на каком месте это поставить.

public View getView(final int position, View convertView, ViewGroup parent) 
{ 
    LayoutInflater inflater= (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    if(convertView==null) 
    { 
     convertView=inflater.inflate(R.layout.new_applwizard_extuser_listrow,null); 


    TextView appl_Name=(TextView)convertView.findViewById(R.id.ext_app_name); 

    auto_brand_Name=(AutoCompleteTextView)convertView.findViewById(R.id.ext_auto_brand_txt); 
    auto_brand_Name.setFocusable(true); 
    auto_brand_Name.setFocusableInTouchMode(true); 

    ToggleButton toggle_status=(ToggleButton)convertView.findViewById(R.id.ext_toggle_cover); 
    LinearLayout ll_save_btn=(LinearLayout)convertView.findViewById(R.id.ll_ext_btn_appsubmit); 

    try 
    { 

     appl_Name.setText(alApplianceDetails.get(position).getAppliance_Name().toString()); 

     if(alApplianceDetails.get(position).getStatus()==true) 
     { 
      toggle_status.setChecked(true); 
     } 
     else 
     { 
      toggle_status.setChecked(false); 
     } 


     if(alApplianceDetails.get(position).getBrand_Id()!=0) 
     { 
      String brand_name=null; 
      brand_name=dbHandler.getBrand_id(String.valueOf(alApplianceDetails.get(position).getBrand_Id())); 
      Log.d("brand name", brand_name); 

      auto_brand_Name.setText(brand_name); 
     } 
     else 
     { 
      Log.d("brand name", "no brand"); 

     } 


     try 
     { 
     auto_brand_Name.setOnItemClickListener(new OnItemClickListener() 
     { 

      @Override 
      public void onItemClick(AdapterView<?> parent,View view, int position, long id) 
      { 
       String selection = parent.getItemAtPosition(position).toString(); 
       //auto_brand_Name.setText(selection); 

       Log.d("adpter value..",""+parent.getAdapter().getItem(position).toString()); 

       try 
       { 
        AutoCompleteTextView brnd=(AutoCompleteTextView)view; 
        //Log.d("text value.....",brnd.getText().toString()); 
        brnd.setText(filteredVal); 
       } 
       catch(Exception e) 
       { 
        e.printStackTrace(); 
       } 

      } 
     }); 
     } 
     catch(Exception e) 
     { 

     } 
     auto_brand_Name.addTextChangedListener(new TextWatcher() 
     { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) 
      { 
       if(alApplianceDetails.get(position).getAppliance_TypeId()!=0) 
       { 
        String app_name=null; 
        app_name=dbHandler.getApp_id(String.valueOf(alApplianceDetails.get(position).getAppliance_TypeId())); 

        appliance=app_name; 
        Log.d("app_name",app_name); 

       } 
       else 
       { 
        Log.d("app_name", "No App"); 
       } 

       alBrands.clear(); 

       getBrand();     
       for(int i=0;i<alBrand_Common_Objects.size();i++) 
       {     
        alBrands.add(alBrand_Common_Objects.get(i).getcommon_name()); 

       } 

       Log.d("brands_list", alBrands.toString()); 
       aaBrand =new ArrayAdapter<String>(activity.getApplicationContext(), R.layout.spinner_item, alBrands); 

       auto_brand_Name.setThreshold(1); 
       auto_brand_Name.setAdapter(aaBrand); 
       auto_brand_Name.postInvalidate(); 
       auto_brand_Name.invalidate(); 
       auto_brand_Name.showDropDown(); 

       aaBrand.setNotifyOnChange(true); 
       //aaBrand.notifyDataSetChanged(); 

      } 


      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) 
      { 
       Log.d("filtered value...", s.toString()); 
       filteredVal=s.toString(); 

       //auto_brand_Name.setText(s.toString()); 

      } 



      @Override 
      public void afterTextChanged(Editable s) 
      { 
       try 
       { 
       //auto_brand_Name.setText(filteredVal); 
       } 
       catch(Exception e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     }); 



    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
    } 
    return convertView; 
} 
+0

Нам очень нужна дополнительная информация о том, что вы не можете получить. Опубликовать ошибки и примеры кода. Единственное, что я могу сказать из вашего текста, - это то, что EditText можно редактировать по умолчанию, а TextView - нет. – Treeline

+0

Да, мы можем сделать. когда мы нажимаем на представление списка в некоторой позиции, тогда мы можем перейти к новой активности там, где мы можем отредактировать то, что хотим, и, наконец, мы поместили кнопку отправки, чтобы отправить данные и сохранить их на сервере. Если вы получаете какую-либо ошибку, то отправляйте log-cat, тип ошибки которого вы получаете. – Hanuman

+0

Я отредактировал мой вопрос. Теперь смотри этот вопрос – User123

ответ

0

Вы хотите отредактировать свои данные после выбора строки списка, и она будет обновляться и на стороне сервера.

  1. Создать представление списка и заполнить данные.
  2. Нажмите на любую строку, и вы откроете новое действие или всплывающее окно, которое содержит текст редактирования с вашими фактическими данными.
  3. Вы можете отредактировать эти данные или отменить
  4. Обновите свои данные на сервере через API. и адаптер также.
  5. В случае активности или всплывающего окна обновите свой адаптер, вызвав notifyDataSetChanged();
  6. Отменить ваш список будет таким же.
+0

Я отредактировал мой вопрос. Теперь смотри этот вопрос – User123

+0

Я тоже видел ваш код. пожалуйста, обратитесь выше, чтобы достичь этого. Я считаю, что каждая строка имеет autocompltetextview и синхронизация с сервером также сложнее только для небольшой задачи. – Yogendra

Смежные вопросы