【问题标题】:Android ListView setLayoutParams causes clicking first item to hangAndroid ListView setLayoutParams 导致单击第一个项目挂起
【发布时间】:2016-12-15 23:55:14
【问题描述】:

我正在以编程方式设置 ListView 中的行高。但是,在我这样做之后,单击 ListView 中的第一个项目会挂起,直到我单击另一个项目。只有这样它才开始运作。如果我不设置布局参数,它工作正常。我真的很困惑,任何帮助都会很棒。这是我设置布局的地方:

  @Override
  public View getView(final int position, View convertView, ViewGroup parent) {
      ViewHolder viewHolder = null;
      //Get the TextView and CheckBox of each row
      if (convertView == null) {
          LayoutInflater inflator = context.getLayoutInflater();
          convertView = inflator.inflate(R.layout.row, null);
          viewHolder = new ViewHolder();
          viewHolder.name = (TextView) convertView.findViewById(R.id.text1);
          viewHolder.checkBox = (CheckBox) convertView.findViewById(R.id.check);
          viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

              @Override
              public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                  int getPosition = (Integer) buttonView.getTag();  // Here we get the position that we have set for the checkbox using setTag.
                  list.get(getPosition).setChecked(buttonView.isChecked()); // Set the value of checkbox to maintain its state.
              }
          });
          convertView.setTag(viewHolder);
          convertView.setTag(R.id.check, viewHolder.checkBox);
      } else {
          viewHolder = (ViewHolder) convertView.getTag();
      }
      viewHolder.checkBox.setTag(position);

      //Set row height to height of the action bar *************CODE IN QUESTION
      final TypedArray styledAttributes = getContext().getTheme().obtainStyledAttributes(
              new int[] { android.R.attr.actionBarSize });
      int mActionBarSize = (int) styledAttributes.getDimension(0, 0);
      styledAttributes.recycle();
      convertView.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.WRAP_CONTENT, mActionBarSize));
      convertView.requestLayout(); //**************************CODE IN QUESTION

      //Set name and state of checkbox
      viewHolder.name.setText(list.get(position).getName());
      viewHolder.checkBox.setChecked(list.get(position).IsChecked());

      final ViewHolder holder = (ViewHolder) convertView.getTag();

      final ListView lv = (ListView) parent;

【问题讨论】:

    标签: android listview freeze layoutparams


    【解决方案1】:

    自己解决了。将 convertView.setLayoutParams 更改为 convertView.setMinimumHeight(mActionBarSize) 即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 2015-09-30
      相关资源
      最近更新 更多