Создание чего-то вроде контекстной панели действий

Я работаю над проектом, и он почти закончен. но я уже давно застал проблему. В моем приложении используется контекстная панель действий для выбора элементов списка, но, как вы должны знать, контекстная панель действий недоступна для более старых версий андроида, таких как пряники, и я хочу поддерживать совместимость для них, а также 11+. Поэтому я решил создать два макета, один использует фактическую контекстуальную панель действий, а другой использует мою собственную настраиваемую CAB. Я начал строить этот проект, и до сих пор все шло хорошо.

поэтому я использую приведенный ниже код для захвата первого длинного клика и других кликов для выбора элементов:

@Override
 public boolean onItemLongClick ( AdapterView < ? > adapterView , View view , int position , long id ) {

 selectedItems.add( position );

 this.listView.getChildAt( position ).setBackgroundColor( getResources( ).getColor( R.color.list_item_selected ) );
 getActivity( ).invalidateOptionsMenu( );

 return true;

 }

 @Override
 public void onListItemClick ( ListView listView , View view , int position , long id ) {

 if ( selectedItems.size( ) == 0 ) {

 getActivity( ).invalidateOptionsMenu( );

 } else {

 if ( !selectedItems.contains( position ) ) {

 selectedItems.add( position );
 view.setBackgroundColor( getResources( ).getColor( R.color.list_item_selected ) );

 } else {

 selectedItems.remove( Integer.valueOf( position ) );
 view.setBackgroundColor( getResources( ).getColor( R.color.list_item_deselected ) );

 }

 getActivity( ).invalidateOptionsMenu( );

 }

 }

и есть только одна проблема, и именно тогда, когда я выбираю один элемент, и я прокручиваю вниз, также выбирается множество других элементов. теперь я ЗНАЮ, ЧТО ПРИНИМАЕТ ПРОБЛЕМУ, и я попытался решить эту проблему, добавив эти строки в свой пользовательский адаптер:

@Override
 public View getView ( int position , View convertView , ViewGroup parent ) {

 View listItemView = convertView;

 if ( listItemView == null ) {

 LayoutInflater layoutInflater = ( LayoutInflater ) this.context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );

 listItemView = layoutInflater.inflate( id , parent , false );

 ApplicationsListViewHolder viewHolder = new ApplicationsListViewHolder( );

 viewHolder.textViewAppName = ( TextView ) listItemView.findViewById( R.id.list_item_fragment_applications_list_textview_application_name );
 viewHolder.textViewAppSize = ( TextView ) listItemView.findViewById( R.id.list_item_fragment_applications_list_textview_application_size );
 viewHolder.imageViewAppStorage = ( ImageView ) listItemView.findViewById( R.id.list_item_fragment_applications_list_imageview_application_storage );
 viewHolder.imageViewAppLogo = ( ImageView ) listItemView.findViewById( R.id.list_item_fragment_applications_list_imageview_application_icon );

 listItemView.setTag( viewHolder );

 }

 ApplicationsListViewHolder viewHolder = ( ApplicationsListViewHolder ) listItemView.getTag( );

 viewHolder.textViewAppName.setText( this.applicationManager.getAppName( this.values.get( position ) ) );
 viewHolder.textViewAppSize.setText( "Version : " + this.applicationManager.getAppVersion( this.values.get( position ) ) );
 viewHolder.imageViewAppLogo.setImageDrawable( this.applicationManager.getAppIcon( this.values.get( position ) ) );

 if ( ApplicationsListFragmentCompat.selectedItems.contains( position ) ) {

 listItemView.setBackgroundResource( R.color.list_item_selected );

 } else {

 listItemView.setBackgroundResource( R.color.list_item_deselected );

 }

 if ( this.applicationManager.checkStorage( this.values.get( position ) ) ) {

 viewHolder.imageViewAppStorage.setImageResource( R.drawable.ic_action_sd_storage );

 } else if ( this.applicationManager.checkStorage( this.values.get( position ) ) == false ) {

 viewHolder.imageViewAppStorage.setImageResource( R.drawable.ic_action_phone );

 }

 return listItemView;

 }

но так как я не могу вспомнить этот метод каждый раз, когда пользователь выбирает элемент, он по-прежнему показывает одно и то же поведение в первый раз, но если я прокручиваю вверх и вниз снова, все работает.

Я был бы очень признателен, если бы кто-то мог дать мне решение этого.

PS, если вы знаете лучший способ добиться того, чего я хочу, сообщите мне, но я должен закончить этот проект за 2 дня максимум, поэтому, пожалуйста, предложите что-то не трудоемкое.

заранее спасибо

1 ответ

Просто используйте ActionBarCompat или ActionBarSherlock.

licensed under cc by-sa 3.0 with attribution.