После прочтения десятков Q & A относительно предмета, я не смог найти ответ на эту ситуацию.setImageDrawable не устанавливает текущий выталкиваемый
В моем приложении пользователь перетаскивает разные значки из одного табличного макета в другой (нижняя таблица выглядит как «клавиатура значка»).
После перетаскивания значка в верхнюю таблицу (он заменяет изображение заполнителя) пользователь должен уметь перетаскивать его туда в разные места.
Прямо сейчас, первая часть работает отлично. Я могу перетаскивать значки с «клавиатуры» в верхнюю таблицу. но по какой-то причине, когда я пытаюсь перетащить его между разными местоположениями внутри этого макета, imageView, который должен измениться на значок, остается с тем же drawable (placeholder).
public boolean onDrag(View v, DragEvent event) {
ImageView imageOnBoard = (ImageView) v;
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
break;
case DragEvent.ACTION_DRAG_ENTERED:
imageOnBoard.setBackgroundColor(0xFF00FF00);
break;
case DragEvent.ACTION_DRAG_EXITED:
imageOnBoard.setBackgroundColor(color.transparent);
imageOnBoard.setOnTouchListener(null);
break;
case DragEvent.ACTION_DROP:
imageOnBoard.setBackgroundColor(color.transparent);
TableRow tr1 = (TableRow) imageOnBoard.getParent();
int r=tr1.indexOfChild(imageOnBoard);
TableLayout tl1 = (TableLayout) tr1.getParent();
int c=tl1.indexOfChild(tr1);
ImageView strategyIcon = (ImageView) (event.getLocalState());
TableLayout source = (TableLayout) strategyIcon.getParent().getParent();
if (source.equals((TableLayout) findViewById(R.id.tableLayout)))
{
Drawable draw = strategyIcon.getDrawable();
imageOnBoard.setImageDrawable(draw);
}
else
{
Drawable draw = strategyIcon.getDrawable();
imageOnBoard.setImageDrawable(draw);
}
imageOnBoard.setVisibility(View.VISIBLE);
imageOnBoard.setOnTouchListener(new MyTouchListener());
break;
case DragEvent.ACTION_DRAG_ENDED:
break;
default:
break;
}
return true;
}
, как вы можете видеть, я разделить действие DRAG_DROP в двух случаях (перетаскиванием из «клавиатуры» и тащат в верхней макете. Я проверил его, и он перейдет в разных случаях, но рисую объект, кажется, «unupdated».
Пожалуйста, помогите!
теперь я понимаю, что проблема при извлечении вытяжки (getDrawable) во второй раз, от верхнего расположения, я не получать текущий, но оригинальный. Как я могу это обработать?
Это не решило проблему. кроме того, метод работает во втором случае, так почему он не должен работать над первым? – Maoritzio
это зависит от устройства, если ваше устройство находится выше уровня api 15, тогда первый случай будет выполнен, иначе будет выполняться второй случай. –
Что я имел в виду, так это то, что инструкция else в моем коде (а не в предложенном вами ответе) выполняется и работает нормально, и она эквивалентна выражению «if», так почему бы им не работать? – Maoritzio