2015-04-15 4 views
0

У меня есть 85 параметров настройки, которые мне нужно отобразить на экране. Я не могу использовать RecyclerView или ListView, потому что EditTexts ужасны. Выполнение того, как я делаю, приводит к значительному замедлению. Я не хочу делать это вручную. Любая помощь приветствуется.Android Dynamic Edit Texts

Соответствующий код:

public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    LinearLayout ll = (LinearLayout) view.findViewById(R.id.ssm_ll); 
    List<Category> AllCats = (List<Category>) getArguments().getSerializable("Category"); 
    temp = new LinearLayout(getActivity()); 
    LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    new Thread(new Runnable() { 
     public void run() { 
      for (Category cg : AllCats) { 
       LinearLayout tv = (LinearLayout) inflater.inflate(R.layout.scoring_setting_template, null); 
       TextView Catwording = (TextView) tv.findViewById(R.id.sst_catwording); 
       Catwording.setText("" + cg.getCatWording()); 
       temp.addView(tv); 
      } 
     } 
    }).run(); 
    temp.addView(temp); 
    ll.addView(temp); 
} 
+0

Что делает RecyclerView или ListView с EditText? Не могли бы вы пояснить, что вы пытаетесь сделать, не используйте onViewCreated, как это ... –

+0

Если вы используете EditText в Recyclerview или Listview, порядок вкладок не работает должным образом по другой общей странности. Рециркулятор или просмотр будут правильно загружаться. Что не так с использованием onViewCreate, как это. Я верю, что я просто не знаю. – gllowmas

+0

Вы можете использовать реализацию ViewHolder в Адаптере для ListView, сохраняя значения поля EditText в List, а затем используя этот список, чтобы повторно заполнить поля EditText в методе 'getView()' адаптера. Если вам нужен полный пример того, о чем я говорю, дайте мне знать, и я могу написать более полный ответ. – zgc7009

ответ

1

слишком долго для комментариев, не уверен, если это работает, просто предложение Попробовать

I гавань» t проверил это вообще, но было слишком долго предлагать попробовать в комментарии. Если это не помогает, дайте мне знать, и я удалю это как возможный ответ (пожалуйста, держитесь от своих отрицательных голосов снова. Я не уверен в этом как ответ).

Поскольку адаптер в ListView должен обрабатывать создание следующего вида, которое не видно, что позволяет плавно прокручивать, вы все равно можете управлять этим в ListView (теоретически). Можно программно установить идентификатор и обработать следующий вызов, как это в вашем адаптере getView():

editText.setId(position + 1);  // + 1 so your id is never 0 
if(position < getCount() - 1) 
    editText.setNextFocusDown(position + 2);  // the id of the next edit text 
else 
    editText.setImeOptions(EditorInfo.IME_ACTION.DONE); 

Теоретически, ваш ListView всегда построил следующий элемент просмотра списка, если только это не последний пункт в списке (который вы затем можете установить для ime-параметров), а не на 100%. Опять же, я не уверен, что это работает, но это явно слишком много для комментария.

в то время как я делаю пост

За содержание каждого EditText вы могли бы сделать что-то вроде

private SparseArray<String> mEditTextInputs = new SparseArrayt<>(); 

затем в getView(), сделать параметр позиции окончательным и попытаться

editText.setText(mEditTextInputs.get(position); 

editText.addTextChangedListener(new TextWatcher(){ 
    public void afterTextChanged(Editable s){} 
    public void beforeTextChanged(CharSequence s, int start, int count, int after){} 
    public void onTextChanged(CharSequence s, int start, int before, int count){ 
     mEditTextInputs.put(position, s.toString()); 
    } 
} 
0

Это не самая лучшая идея, но для того, чтобы делать то, что вы просите создать макет и заселить ScrollView с EditText поэтому при выборе следующего на клавиатуре она идет вниз один EditText :

Вот пример:

https://gist.github.com/lt-tibs1984/5d3e6a50f9d883026014

к г о еще больше каждый раз, когда вы делаете:

 int count = 0; 

     for (String item : items) { 
      View view = LayoutInflater.from(getActivity()).inflate(R.layout.list_item, null); 
      EditText editText = (EditText)view.findViewById(R.id.editTextDemo); 
      editText.setText(item); 
      // set a tag here to uniquely identify it later 
      editText.setTag(count); 
      mLinearLayout.addView(view); 
      count++; 
     } 

Альтернативный цикл:

 for (int i = 0 ; i < 25; i++) { 
      View view = LayoutInflater.from(getActivity()).inflate(R.layout.list_item, null); 
      EditText editText = (EditText)view.findViewById(R.id.editTextDemo); 
      editText.setText(items.get(i)); 
      // set a tag here to uniquely identify it later 
      editText.setTag(i); 
      mLinearLayout.addView(view); 
     }