如何更改listview中第一个元素的buttontext?
View v = getListView().getChildAt(0 - yourListView.getFirstVisiblePosition());
Button Butt = (Button) v.findViewById(R.id.buttonLine);
Butt.setText("newtext");
此代码崩溃了应用程序。
答案 0 :(得分:2)
解决。
// A ViewHolder keeps references to children views to avoid
// unneccessary calls
// to findViewById() on each row.
ViewHolder holder;
// When convertView is not null, we can reuse it directly, there is
// no need
// to reinflate it. We only inflate a new View when the convertView
// supplied
// by ListView is null.
if (convertView == null) {
convertView = mInflater.inflate(R.layout.adaptor_content, null);
// Creates a ViewHolder and store references to the two children
// views
// we want to bind data to.
holder = new ViewHolder();
holder.buttonLine = (Button) convertView.findViewById(R.id.buttonLine);
} else {
// Get the ViewHolder back to get fast access to the TextView
// and the ImageView.
holder = (ViewHolder) convertView.getTag();
} holder.buttonLine.setText("Changed text of button");
/////////////
static class ViewHolder {
TextView textLine;
ImageView iconLine;
Button buttonLine;
TextView textTwo;
}
此代码逐个设置按钮文本。您必须使用if设置一些条件(例如,如果软件包已安装设置为“卸载”,如果未设置“安装”) 。使用此代码,我无法设置“第一个元素的第二个”。但我可以添加计数器和检查条件。
答案 1 :(得分:1)
传递给getChildAt(...)的代码总是为负数,除非位置为0.因此,它通常会根据documentation返回null。尝试将其与null.findViewById(...)一起使用时,该null值将崩溃。
尝试删除
"0 -"
答案 2 :(得分:0)
我想我找到了答案,但你必须对它进行测试。
RelativeLayout listItem = (RelativeLayout)getListView().getChildAt(getListView().getFirstVisiblePosition());
Button btn = (Button)listItem.findViewById(R.id.buttonLine);
btn.setText("Hi! I updated you manually!");
基本上,你从getListView()得到的东西.getChildAt()是RelativeLayout对象,在你的XML中定义为列表项模板。然后你从它得到第2项 - 定义的第三项,这是你的按钮。