Android layout 奇怪的ListView行为[更快的性能]

Android layout 奇怪的ListView行为[更快的性能],android-layout,android-widget,android-listview,android-arrayadapter,Android Layout,Android Widget,Android Listview,Android Arrayadapter,我发现listview的这种非常奇怪的行为,它在Android 2.1和4.1上的行为有所不同 下面是我写的两个类,google建议使用它们来提高ListView的性能。 如何复制:添加一个条目,选中第一个复选框,然后添加多个条目。复选框在元素中浮动! 以下是我写的一个小项目: 任何人都可以解释问题或解决方法? public class AlarmManagerActivity extends Activity { private PerformanceArrayAdapter mPer

我发现listview的这种非常奇怪的行为,它在Android 2.1和4.1上的行为有所不同 下面是我写的两个类,google建议使用它们来提高ListView的性能。 如何复制:添加一个条目,选中第一个复选框,然后添加多个条目。复选框在元素中浮动! 以下是我写的一个小项目:
任何人都可以解释问题或解决方法?

public class AlarmManagerActivity extends Activity {
    private PerformanceArrayAdapter mPerformaceArrayAdapter;
    private ListView mListView;
    private ArrayList<String> mListItems = new ArrayList<String>();
    private int mCounter = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mListView = (ListView) findViewById(R.id.listViewCondition);
        mPerformaceArrayAdapter = new PerformanceArrayAdapter(this, mListItems);
        mListView.setAdapter(mPerformaceArrayAdapter);
    }

    public void onClickAdd(View view){
        mListItems.add("" + mCounter++);
        mPerformaceArrayAdapter.notifyDataSetChanged();
    }
}
以及性能适配器类

public class PerformanceArrayAdapter extends ArrayAdapter<String> {
    private final Activity context;
    private final ArrayList<String> mListItems;

    static class ViewHolder {
        public TextView textView1;
        public TextView textView2;
        public CheckBox checkBox;
    }

    public PerformanceArrayAdapter(Activity context, ArrayList<String> listItems) {
        super(context, R.layout.row_layout, listItems);
        this.context = context;
        this.mListItems = listItems;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View rowView = convertView;
        if (rowView == null) {
            LayoutInflater inflater = context.getLayoutInflater();
            rowView = inflater.inflate(R.layout.row_layout, null);
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.textView1 = (TextView) rowView.findViewById(R.id.textView1);
                    viewHolder.textView2 = (TextView) rowView.findViewById(R.id.textView2);
            viewHolder.checkBox = (CheckBox) rowView.findViewById(R.id.checkBox1);
            rowView.setTag(viewHolder);
        }
        ViewHolder holder = (ViewHolder) rowView.getTag();
        holder.textView1.setText(mListItems.get(position));
        return rowView;
    }
}

多亏了沃格拉,我找到了解决办法:) 我必须使用这里提到的域模型来跟踪文本视图和复选框

public class PerformanceArrayAdapter extends ArrayAdapter<String> {
    private final Activity context;
    private final ArrayList<String> mListItems;

    static class ViewHolder {
        public TextView textView1;
        public TextView textView2;
        public CheckBox checkBox;
    }

    public PerformanceArrayAdapter(Activity context, ArrayList<String> listItems) {
        super(context, R.layout.row_layout, listItems);
        this.context = context;
        this.mListItems = listItems;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View rowView = convertView;
        if (rowView == null) {
            LayoutInflater inflater = context.getLayoutInflater();
            rowView = inflater.inflate(R.layout.row_layout, null);
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.textView1 = (TextView) rowView.findViewById(R.id.textView1);
                    viewHolder.textView2 = (TextView) rowView.findViewById(R.id.textView2);
            viewHolder.checkBox = (CheckBox) rowView.findViewById(R.id.checkBox1);
            rowView.setTag(viewHolder);
        }
        ViewHolder holder = (ViewHolder) rowView.getTag();
        holder.textView1.setText(mListItems.get(position));
        return rowView;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">
    <TextView android:id="@+id/textView1" android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true" android:text="TextView1"></TextView>
    <TextView android:id="@+id/textView2" android:layout_below="@+id/textView1"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:text="TextView2"></TextView>
    <CheckBox android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:id="@+id/checkBox1"
            android:layout_alignParentRight="true" android:focusable="false"
            android:focusableInTouchMode="false"></CheckBox>
    </RelativeLayout>