我一直坚持尝试在Java中为Android应用程序实现自定义列表视图。
我正在尝试列出一堆字(通常为100 问题在于缺少一些单词。这似乎是随机的。我认为可能更有可能缺少用于“突出显示”的词语。 (即
我尝试了几种不同的代码变体,但这是我目前所拥有的: 此自定义适配器通过以下代码实例化并分配: 似乎数据变量之间存在一些脱节,以及屏幕上显示的内容。我迷路了,请帮帮忙。 提前致谢! public class ResultsAdapter<T> extends ArrayAdapter<String> {
private ArrayList<String> mHighlightSet;
private ArrayList<String> mGlobalSet;
private Context mContext;
public ResultsAdapter(
Context context,
int textViewResourceId,
ArrayList<String> globalSet,
ArrayList<String> highlightSet) {
super(context, textViewResourceId, globalSet);
mContext = context;
mGlobalSet = globalSet;
mHighlightSet = highlightSet;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// return super.getView(position, convertView, parent);
final String text = mGlobalSet.get(position);
TextView view = new TextView(mContext);
view.setText(text);
if(mHighlightSet.contains(text))
view.setTextColor(Color.RED);
else
view.setTextColor(Color.WHITE);
return view;
}
if (mSummaryList != null & mAllWords != null & foundWords != null) {
ArrayList<String> globalSet = new ArrayList<String>(mAllWords.keySet()); // mAllWords is a TreeMap
ArrayList<String> subset = hud.getFoundWords();
mResultsAdapter = new ResultsAdapter<String>(this, R.layout.simplerow, globalSet, subset);
mSummaryList.setAdapter(mResultsAdapter);
mSummaryList.setOnItemClickListener(onWordListItemClickListener);
}
答案 0 :(得分:1)
如果用少量单词进行测试可能会有所帮助,因此您可以更好地了解自己是否确实遇到了问题。我假设mAllWords
是某种地图。通过执行mAllWords.keySet()
,您将以随机顺序获取单词。这可能很难判断一个单词是否真的存在。你应该尝试对那里的单词进行排序,或者使用一些已知的有序集合,这样你就可以更好地告诉我们发生了什么。
此外,在getView中,您不希望创建TextView。这实在是效率低下。相反,您应该从已经膨胀的布局中获取视图并更新样式。即,像:
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView textView = view.findById(R.id.text); // id of the text view in R.layout.simplerow
String text = textView.getText();
if(mHighlightSet.contains(text))
view.setTextColor(Color.RED);
else
view.setTextColor(Color.WHITE);
return view;
}
超级的getView已经填写了正确的单词。您只想更新getView方法中的样式。
答案 1 :(得分:1)
事实证明,数据与我期望/认为的数据不同。 (梅拉,你基本上是正确的。)
否则原始代码将正常运行。
最后,getView(...)类如下所示:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView view = (TextView) super.getView(position, convertView, parent);
final String text = (String) view.getText();
if(mHighlightSet.contains(text))
view.setTextColor(Color.RED);
else
view.setTextColor(Color.WHITE);
return view;
}