更改列表中的第一个元素

时间:2011-04-14 17:36:28

标签: android

如何更改listview中第一个元素的buttontext?

 View v = getListView().getChildAt(0 - yourListView.getFirstVisiblePosition());
 Button Butt = (Button) v.findViewById(R.id.buttonLine);
 Butt.setText("newtext");

此代码崩溃了应用程序。

3 个答案:

答案 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项 - 定义的第三项,这是你的按钮。