我需要在视图上显示85个设置项。我无法使用RecyclerView
或ListView
,因为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);
}
答案 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++;
}