Урок 113. Android 3. ActionMode, как альтернатива контекстному меню
Добавлено: 18 ноя 2012, 23:00
В этом уроке:
- работаем с ActionMode
Click here to read this article!
- работаем с ActionMode
Click here to read this article!
Добро пожаловать на форум сайта
http://forum.startandroid.ru/
В списке определяйте, сколько элементов выделено, как-нить передавайте эту инфу объекту mode и перерисовывайте его (думаю, что invalidateOptionsMenu сработает).denisneposeda писал(а):Подскажите как можно отследить. Есть 3 пункта меню в ActionMode...2 пункта должны работать только если выбран один элемент списка, а 3-ий пункт работает при любом выделении, или один пункт или несколько?
Код: Выделить всё
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
int itemCount = lvActionMode.getCheckedItemCount();
if (itemCount > 1) {
mode.getMenu().setGroupVisible(R.id.groupTwoItems, false);
} else {
mode.getMenu().setGroupVisible(R.id.groupTwoItems, true);
}
Log.d(LOG_TAG, "position = " + position + ", checked = " + checked);
}
Присоединяюсь к вопросу, аналогичная проблема, никак не могу решить.Serious писал(а):Здравствуйте.
Если подставить в Адаптер свой view, то множественный выбор не работает.
Что необходимо сделать чтоб работал множественный выбор со своим view?
upd: Судя по логам множественный выбор работает:
D/myLogs(595): position = 4, checked = true
D/myLogs(595): position = 5, checked = true
D/myLogs(595): position = 5, checked = false
D/myLogs(595): position = 3, checked = true
Но визуально выделения нет.
Код: Выделить всё
android:background="?android:attr/activatedBackgroundIndicator"
Код: Выделить всё
elv.setItemChecked(elv.getPositionForView(v), !elv.isItemChecked(elv.getPositionForView(v)));
При нажатии срабатывает onDestroyActionMode.Digetix писал(а):Как обработать нажатие на галку в левой части? Или убрать её вообще
А что пишет?K_Vladimir писал(а): 3. При использовании либы import android.support.v7.view.ActionMode; вместо import android.view.ActionMode;
выделяет красным new MultiChoiceModeListener в строке lvActionMode.setMultiChoiceModeListener(new MultiChoiceModeListener() {........
Так и не разобрался как это починить.
Пришлось отказаться от использования support lib
Пишет при компиляции: Error:(48, 79) error: <anonymous com.vladimir.kushnarev.p1131_actionmode.MainActivity$1> is not abstract and does not override abstract method onItemCheckedStateChanged(ActionMode,int,long,boolean) in MultiChoiceModeListenerRazor писал(а):А что пишет?K_Vladimir писал(а): 3. При использовании либы import android.support.v7.view.ActionMode; вместо import android.view.ActionMode;
выделяет красным new MultiChoiceModeListener в строке lvActionMode.setMultiChoiceModeListener(new MultiChoiceModeListener() {........
Так и не разобрался как это починить.
Пришлось отказаться от использования support lib
Код: Выделить всё
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.view.ActionMode;
import android.util.Log;
//import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.AbsListView.MultiChoiceModeListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
////////// Вариант для списка ListView
ActionMode actionMode;
ListView lvActionMode;
final String LOG_TAG = "myLogs";
String[] data = { "one", "two", "three", "four", "five" };
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_activated_1, data);
lvActionMode = (ListView) findViewById(R.id.lvActionMode);
lvActionMode.setAdapter(adapter);
lvActionMode.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
lvActionMode.setMultiChoiceModeListener(new MultiChoiceModeListener() {
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.context, menu);
return true;
}
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
mode.finish();
return false;
}
public void onDestroyActionMode(ActionMode mode) {
}
public void onItemCheckedStateChanged(ActionMode mode,
int position, long id, boolean checked) {
Log.d(LOG_TAG, "position = " + position + ", checked = "
+ checked);
}
});
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}
В смысле добавить @Override в код?doter.ua писал(а):гугл: аннотация @Override