0

リストビューのコンテキストメニューを作成しようとしているので、ユーザーが行を長押しするとコンテキストメニューが表示され、ユーザーがオプションを選択すると行が選択されます。ただし、多くの行が選択されている場合は、リストビュー内の他の行に対してパターンで選択が繰り返されます。

行をクリックするだけでも同じことが起こります。ビューのリサイクルに問題がある場合はIDK、または何。

両方の問題を解決する方法。最初は内部で処理されるため、オブジェクトonContextItemSelected(MenuItem item)を操作して行を管理し、2番目はで処理されます。MenuItemAdapterView.OnItemClickListener

ところで、私はCursorAdapterを使用してListViewにデータを入力しています。

ありがとう。

これが私のコードです:

// Listener for the click on the items in the ListView
mListViewListener = new AdapterView.OnItemClickListener()
{
    // When the user clicks some item, the Activity that shows the available dates will be shown
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long arg3)
    {
        view.setBackgroundColor(0xff333333);
    }
};


// Handle the LongClick on the row
@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo)
{
    super.onCreateContextMenu(menu, view, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.contact_options, menu);
}

@Override
public boolean onContextItemSelected(MenuItem item)
{
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    switch(item.getItemId())
    {
        case R.id.context_menu_item:
            info.targetView.setBackgroundColor(0xff333333);

            default:
            return super.onContextItemSelected(item);
    }
}
4

1 に答える 1

1

CursorAdapterでこのようなものが機能するはずです:

private Set<String> mSelectedContactNumbers = new HashSet<String>();

@Override
public void bindView(View view, Context context, final Cursor cursor)
{
    final String contactNumber = cursor.getString(cursor.getColumnIndex("contact_number"));
    view.setOnClickListener(new View.OnClickListener() 
    {
        @Override
        public void onClick(View v) 
        {
                  if (!mSelectedContactNumbers.remove(contactNumber)) {
                       mSelectedContactNumbers.add(contactNumber);
                  }
                  notifyDataSetChanged();
        }
    });
    if (mSelectedContactNumbers.contains(contactNumber)) {
       view.setBackgroundColor(0xff333333);
    } else {
       view.setBackgroundColor(0);
    }
    createView(view, cursor);     
}

これは簡単な解決策です。OnItemClickListenerから呼び出すことができるtoggleSelected関数をアダプターに作成します。そうすれば、少し良くなります。

于 2012-06-19T01:40:10.107 に答える