Android 如何使用动态添加的TextView覆盖ArrayAdaptor中的getView方法?
如何使用动态添加的TextView在Android 如何使用动态添加的TextView覆盖ArrayAdaptor中的getView方法?,android,android-listview,android-arrayadapter,Android,Android Listview,Android Arrayadapter,如何使用动态添加的TextView在ArrayAdaptor中覆盖getView方法 以下是我到目前为止的情况: @Override public View getView(int position, View convertView, ViewGroup parent) { View view = null; final ViewHolder holder; if (convertView == null) {
ArrayAdaptor
中覆盖getView
方法
以下是我到目前为止的情况:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.numbergenerationitemlayout,
parent, false);
holder.FL = (FlowLayout) view.findViewById(R.id.itemFlowLayout);
holder.FL.setTag(list.get(position));
view.setTag(holder);
GameSet GS = (GameSet) list.get(position);
ArrayList<Element> normal = GS.getNormalNum();
if (normal != null) {
for (int x = 0; x < normal.size(); x++) {
BallTextView BT = new BallTextView(context, "BLUE_BALL");
String text = "" + normal.get(x).getElement();
BT.setText(text);
holder.FL.addView(BT);
}
}
ArrayList<Element> special = GS.getSpecialNum();
if (special != null) {
for (int x = 0; x < special.size(); x++) {
BallTextView BT = new BallTextView(context, "ORANGE_BALL");
String text = "" + special.get(x).getElement();
BT.setText(text);
holder.FL.addView(BT);
}
}
} else {
view = convertView;
// ((ViewHolder) view.getTag()).FL.setTag(list.get(position));
}
ViewHolder currentHolder = (ViewHolder) view.getTag();
currentHolder.position = position;
return view;
}
@覆盖
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=空;
最终持票人;
if(convertView==null){
holder=新的ViewHolder();
LayoutInflater充气器=上下文。getLayoutInflater();
视图=充气机。充气(R.layout.numbergenerationitemlayout,
父母,假);
holder.FL=(FlowLayout)view.findViewById(R.id.itemFlowLayout);
holder.FL.setTag(list.get(position));
视图.设置标签(支架);
游戏集GS=(游戏集)列表。获取(位置);
ArrayList normal=GS.getNormalNum();
如果(正常!=null){
对于(int x=0;x
我现在面临的问题是,当我向数组中添加新数据并调用notifyDataSetChanged()
;在arrayAdaptor
上,没有添加新项。我会尝试添加
GameSet GS = (GameSet) list.get(position);
外
if (convertView == null) {}
例如在
getView()
方法的开始处,因为在使用列表一段时间后convertView
可能不再是null
需要更改getView方法,以下是解决方案:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.numbergenerationitemlayout,
parent, false);
holder.FL = (FlowLayout) view.findViewById(R.id.itemFlowLayout);
holder.FL.setTag(list.get(position));
view.setTag(holder);
GameSet GS = (GameSet) list.get(position);
ArrayList<Element> normal = GS.getNormalNum();
if (normal != null) {
for (int x = 0; x < normal.size(); x++) {
BallTextView BT = new BallTextView(context, "BLUE_BALL");
holder.FL.addView(BT);
//here only add the view that holds the content.
}
}
ArrayList<Element> special = GS.getSpecialNum();
if (special != null) {
for (int x = 0; x < special.size(); x++) {
BallTextView BT = new BallTextView(context, "ORANGE_BALL");
//here only add the view that holds the content.
holder.FL.addView(BT);
}
}
} else {
view = convertView;
// ((ViewHolder) view.getTag()).FL.setTag(list.get(position));
}
ViewHolder currentHolder = (ViewHolder) view.getTag();
currentHolder.position = position;
//Now do the set text part over here.
return view;
}
@覆盖
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=空;
最终持票人;
if(convertView==null){
holder=新的ViewHolder();
LayoutInflater充气器=上下文。getLayoutInflater();
视图=充气机。充气(R.layout.numbergenerationitemlayout,
父母,假);
holder.FL=(FlowLayout)view.findViewById(R.id.itemFlowLayout);
holder.FL.setTag(list.get(position));
视图.设置标签(支架);
游戏集GS=(游戏集)列表。获取(位置);
ArrayList normal=GS.getNormalNum();
如果(正常!=null){
对于(int x=0;x
基本上只在if(convertView==null)下添加视图内容持有者,然后在条件之外执行setText数据部分
@Override
public int getCount() {
if (hasMore) {
return (int) (Math.ceil((mData.length / 4.0))) + 1;
} else {
return (int) (Math.ceil((mData.length / 4.0)));
}
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
if (position == getCount() - 1 && hasMore) {
convertView = new LinearLayout(context);
ProgressBar progressBar = new ProgressBar(context);
progressBar.setIndeterminateDrawable(context.getResources().getDrawable(R.anim.progress_view_grey_anim));
((LinearLayout) convertView).addView(progressBar);
} else {
}
return convertView;
}
以下是我通常添加的进度视图。将新数据添加到什么数组?公共游戏集ArrayAdapter(活动上下文,列表)这是适配器的构造函数。我将新数据添加到从构造函数传入的列表中。您应该直接在适配器上调用add,而不必手动调用NotifyDataSetChanged。这可能是一个选项,但这样做是否有效?为什么您的数据如此巨大?如果是这样,这意味着该适配器下的代码也需要在外部。(我添加了textview)@Ascorbin是对的,convertView是一个重用的视图,因此您的病情应该只包含充气和设置标签。您还应该注意,如果使用convertView,它将已经包含许多BallTextView,您可以重用或清理这些BallTextView。问题是,如果我向列表中添加新数据,还需要添加新的BallTextView。