Android 滚动后不可选择的列表项

Android 滚动后不可选择的列表项,android,listview,Android,Listview,我对包含ListView的活动有问题。当活动加载时,将填充ListView,我可以很好地单击行。但是,一旦我滚动,这些项目就不再可以点击。为了能够单击某个项目,我必须旋转屏幕(注意:我在清单中为该活动设置了android:configChanges=“keyboardHidden | orientation”,因此该活动甚至不会因为方向更改而被破坏)。我不太确定是什么问题。我有许多包含ListView的活动,但没有一个有这个问题。有人看到什么不对劲吗 更新:我删除了getView开头关于页脚的代

我对包含ListView的活动有问题。当活动加载时,将填充ListView,我可以很好地单击行。但是,一旦我滚动,这些项目就不再可以点击。为了能够单击某个项目,我必须旋转屏幕(注意:我在清单中为该活动设置了
android:configChanges=“keyboardHidden | orientation”
,因此该活动甚至不会因为方向更改而被破坏)。我不太确定是什么问题。我有许多包含ListView的活动,但没有一个有这个问题。有人看到什么不对劲吗

更新:我删除了getView开头关于页脚的代码。现在一切正常。这个代码有什么问题?我的页脚本质上是一个阴影,但如果ListView(阅读:ListView中的项目)占据整个屏幕,我不希望它存在

这是我的活动代码

public class ActivitySelector extends MyActivity implements OnItemClickListener, OnClickListener {

    private ArrayList<MyObject> mItems;
    private ActivitySelectorAdapter mAdapter;

    private ListView mList;
    private LinearLayout mFooter;
    private Button mDone;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.layout_filterselector);

        super.onCreate(savedInstanceState);

        mItems = new ArrayList<MyObject>();

        getDataFromIntent();
        setUpUI();
    }

    public void onClick(View v) {
        if (v.getId() == R.id.activityselector_menu) {
            super.openSlider();
        }
        else if (v.getId() == R.id.activityselector_done) {
            this.onBackPressed();
        }
        else {
            super.onClick(v);
        }
    }

    public void onItemClick(AdapterView<?> l, View v, int position, long id) {
        if (l.getId() == R.id.activityselector_list) {
            if (position < mItems.size()) {
                mItems.get(position).setSelected(!mItems.get(position).getSelected());
                mAdapter.notifyDataSetChanged();
            }
        }
    }


    private void getDataFromIntent() {
        Bundle data = getIntent().getExtras();
        if (data != null) {
            if (data.containsKey("items")) {
                mItems = data.getParcelableArrayList("items");
            }
        }
    }


    private void setUpUI() {
        mDone = (Button) findViewById(R.id.activityselector_done);
        mDone.setOnClickListener(this);

        mList = (ListView) findViewById(R.id.activityselector_list);
        mFooter = (LinearLayout) ((LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.layout_listfooter, mList, false);
        mList.addFooterView(mFooter, null, false);

        mAdapter = new ActivitySelectorAdapter(ActivitySelector.this, R.layout.layout_activityselector_item, mItems);
        mList.setAdapter(mAdapter);
        mList.setOnItemClickListener(this);
    }








    static class ActivitySelectorHolder {
        TextView txtName;
        TextView txtCount;
        ImageView imgCheck;
    }

    public class ActivitySelectorAdapter extends ArrayAdapter<MyObject> {

        private LayoutInflater mInflater;
        ArrayList<MyObject> items;

        public ActivitySelectorAdapter(Context context, int textViewResourceId, ArrayList<MyObject> items) {
            super(context, textViewResourceId, items);
            mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            this.items = items;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (mList.getFirstVisiblePosition() > 0) {
                if (mList.getFooterViewsCount() > 0) {
                    mList.removeFooterView(mFooter);
                }
            }
            else {
                if (mList.getFooterViewsCount() < 1) {
                    mList.addFooterView(mFooter, null, false);
                }
            }

            ActivitySelectorHolder holder = null;

            if (null == convertView) {
                holder = new ActivitySelectorHolder();
                convertView = mInflater.inflate(R.layout.layout_activityselector_item, null);
                holder.txtName = (TextView) convertView.findViewById(R.id.activityselector_item_name);
                holder.txtCount = (TextView) convertView.findViewById(R.id.activityselector_item_count);
                holder.imgCheck = (ImageView) convertView.findViewById(R.id.activityselector_item_check);
                convertView.setTag(holder);
            }
            else {
                holder = (ActivitySelectorHolder)convertView.getTag();
            }

            if (holder.txtName != null) {
                holder.txtName.setText(items.get(position).getName());
            }

            if (holder.txtCount != null) {
                holder.txtCount.setText("(" + String.valueOf(items.get(position).getCount()) + ")");
            }

            if (holder.imgCheck != null) {
                if (items.get(position).getSelected()) {
                    holder.imgCheck.setImageResource(R.drawable.selector_checkmark_reverse);
                }
                else {
                    holder.imgCheck.setImageResource(R.drawable.selector_checkmark);
                }
            }

            return convertView;
        }
    }
}
公共类ActivitySelector扩展了MyActivity实现了OnItemClickListener、OnClickListener{
私有数组列表;
私人活动选择或适配器设置;
私有ListView-mList;
私人线路布置图;
专用按钮mDone;
@凌驾
创建时的公共void(Bundle savedInstanceState){
requestWindowFeature(窗口。功能\u无\u标题);
setContentView(R.layout.layout\u过滤器选择器);
super.onCreate(savedInstanceState);
mItems=新的ArrayList();
getDataFromIntent();
setUpUI();
}
公共void onClick(视图v){
如果(v.getId()==R.id.activityselector_菜单){
super.openSlider();
}
else if(v.getId()==R.id.activityselector_done){
这个。onBackPressed();
}
否则{
super.onClick(v);
}
}
公共虚线单击(适配器视图l、视图v、内部位置、长id){
if(l.getId()==R.id.activityselector\u列表){
如果(位置0){
如果(mList.getFooterViewScont()>0){
mList.removeFooterView(mFooter);
}
}
否则{
if(mList.getFooterViewScont()<1){
mList.addFooterView(mFooter,null,false);
}
}
ActivitySelectorHolder=null;
if(null==convertView){
holder=新活动SelectorHolder();
convertView=mInflater.充气(R.layout.layout\u activityselector\u项,空);
holder.txtName=(TextView)convertView.findViewById(R.id.activityselector\u item\u name);
holder.txtCount=(TextView)convertView.findViewById(R.id.activityselector\u item\u count);
holder.imgCheck=(ImageView)convertView.findViewById(R.id.activityselector\u item\u check);
convertView.setTag(支架);
}
否则{
holder=(ActivitySelectorHolder)convertView.getTag();
}
if(holder.txtName!=null){
holder.txtName.setText(items.get(position.getName());
}
if(holder.txtCount!=null){
holder.txtCount.setText(“(“+String.valueOf(items.get(position.getCount())+”)”);
}
如果(holder.imgCheck!=null){
if(items.get(position.getSelected()){
holder.imgCheck.setImageResource(R.drawable.selector\u checkmark\u reverse);
}
否则{
holder.imgCheck.setImageResource(R.drawable.selector\u复选标记);
}
}
返回视图;
}
}
}

您是否在单击过程中看到列表项背景更改,但没有收到onItemClick消息?此注释出现在addFooterView文档中:
注释:在调用setAdapter之前调用此选项。这是因为ListView可以将提供的光标包装为一个也可以用于页眉和页脚视图的光标。
我不确定这是否是原因,但可能需要进一步调查。@CSmith否。滚动后,背景不再改变。此外,在中未到达onItemClick