我有一个Activity,一个ListView和一个ArrayAdapter
在ArrayAdapter中,有一个TextView(我将其命名为“title”)和使用不同文本动态创建的serval按钮。
我想要做的是当我点击按钮时,我想在按钮上显示文字也是“标题”上的文字。
挑战是当我在适配器中执行button.setOnClickListener时,我不知道如何获得标题。
另一方面,如果我执行list.setOnItemClickListener,单击按钮时它不起作用。此外,因为按钮是动态的,我不知道如何显示它
谢谢!
这是我的getView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Map<String, String> item = listitem.get(position);
View view = inflater.inflate(resId, parent, false);
// get views
final TextView title = (TextView) view.findViewById(R.id.title);
TextView type = (TextView) view.findViewById(R.id.type);
final TextView updateDate = (TextView) view.findViewById(R.id.updateDate);
TableLayout stLayout = (TableLayout) view
.findViewById(R.id.showtimes);
// fo
title.setFocusable(false);
updateDate.setFocusable(false);
// set views
String[] array = DatabaseHelper.MOVIE_SHOWTIMES;
for (int i = 0; i < array.length; i++) {
String datum = item.get(array[i]);
if (datum != null) {
switch (i) {
case 0:
title.setText(datum);
break;
case 1:
String types = MovieHelper.convertMovieTypes(datum);
type.setText(types);
break;
case 2:
try {
Date date = new Date(datum);
String formattedDate = DateFormatHelper.format(
date, DateFormatHelper.DATE);
updateDate.setText(formattedDate);
} catch (ParseException e) {
Log.e(TAG, e.toString());
}
break;
case 3:
try {
JSONArray times = new JSONArray(datum);
TableRow tableRow = new TableRow(context);
tableRow.setGravity(Gravity.CENTER_HORIZONTAL);
int record = 0;
for (int x = 0; x < times.length(); x++) {
String time = times.getString(x);
Date convertedTime = new Date(time);
try {
String formattedTime = DateFormatHelper
.format(convertedTime,
DateFormatHelper.TIME);
Button timeButton = new Button(context);
timeButton.setId(buttonCount);
timeButton.setText(formattedTime);
tableRow.addView(timeButton);
buttonCount++;
record++;
timeButton.setFocusable(false);
timeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.getParent();
Toast.makeText(getApplicationContext(),
((Button)v).getText(),
Toast.LENGTH_SHORT).show();
}
});
} catch (ParseException e) {
Log.e(TAG, e.toString());
}
if (record % 3 == 0 && record != 0) {
stLayout.addView(tableRow);
tableRow = new TableRow(context);
tableRow.setGravity(Gravity.CENTER_HORIZONTAL);
}
}
if (record % 3 != 0 && record != 0) {
stLayout.addView(tableRow);
}
} catch (JSONException e) {
Log.e(TAG, e.toString());
}
break;
}
}
}
return view;
}
}
答案 0 :(得分:0)
首先,您应该回收列表项(如果convertView为null,则仅为膨胀视图)。
为什么要回收意见:
检查this post。关于这一点,这是一个很棒的blog post
基本上,您不会在大多数时间更改列表项的布局,而只是更改其内容。如果你有一个包含1000个项目的列表,那么在向下滚动时会增加1000 xml布局(当再次向上滚动时会增加1000个)。这真的很贵。如果您回收视图,您将一次性膨胀大约10个视图(可见视图的数量),并在滚动时重复使用它们。由于回收机制是内置功能,因此使用它不会花费太多精力......
如果你在谈论这个按钮:
timeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.getParent();
Toast.makeText(getApplicationContext(),
((Button)v).getText(),
Toast.LENGTH_SHORT).show();
}
});
这个标题:
final TextView title = (TextView) view.findViewById(R.id.title);
为什么你不在on click listener中调用title.getText()?