ListView を含むアクティビティに問題があります。アクティビティが読み込まれると、ListView に値が設定され、行をクリックできるようになります。ただし、スクロールすると、アイテムをクリックできなくなります。アイテムをクリックできるようにするには、画面を回転させる必要があります (注:android:configChanges="keyboardHidden|orientation"
マニフェストにこのアクティビティの設定があるため、向きが変わってもアクティビティが破棄されることはありません)。何が問題なのかよくわかりません。ListViews を含む多くのアクティビティがありますが、この問題はありません。誰かが間違っていることを見ていますか?
更新: フッターに関する 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;
}
}
}