Android动态编辑文本

时间:2015-04-15 20:36:42

标签: android performance

我需要在视图上显示85个设置项。我无法使用RecyclerViewListView,因为EditTexts非常糟糕。按照我正在做的方式做出巨大的减速。我不想手动制作这些。任何帮助表示赞赏。

相关代码:

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);
}

2 个答案:

答案 0 :(得分:1)

评论太长,不确定是否有效,只是建议尝试

我根本没有对此进行过测试,但建议尝试评论的时间太长了。如果它没有工作让我知道,我会删除这个作为一个可能的答案(请再次保留你的否定投票我不确定这是一个答案)。

由于ListView中的适配器应该处理创建下一个看不到的视图(允许平滑滚动),你仍然可以在ListView中理论化(理论上)。您可以通过编程方式设置ID并在适配器的getView()中处理下一个调用{<1}}:

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());
    }
}

答案 1 :(得分:0)

这不是最好的主意,但为了按照您的要求创建一个布局并使用ScrollView填充EditText,所以当您在键盘上选择下一个时,它会下降一个{{1} }:

以下是一个例子:

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

每次你做得更远:

EditText

替代循环:

       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++;
        }