Я предпочитаю использовать функцию forEach
, которая имеет собственное закрытие с созданием псевдодиапазона:
var funcs = [];
new Array(3).fill(0).forEach(function (_, i) { // creating a range
funcs[i] = function() {
// now i is safely incapsulated
console.log("My value: " + i);
};
});
for (var j = 0; j < 3; j++) {
funcs[j](); // 0, 1, 2
}
Это выглядит более уродливым, чем диапазоны на других языках, но IMHO менее чудовищным, чем другие решения.
Не то, чтобы ваш ящик открывался автоматически. Это значит, что DrawerLayout
не находит View
для использования в качестве ящика, поэтому оба его прямого дочернего View
s заполняют его. LinearLayout
, предназначенный для того, чтобы быть выдвижным ящиком, который был указан последним, охватывает содержимое View
, поэтому просто появляется, что ящик открыт.
DrawerLayout
определяет, какие View
s использовать как ящики, просматривая его прямые дети для тех, у кого есть горизонтальная настройка layout_gravity
; то есть left
/ right
или start
/ end
. Вы хотите, чтобы этот атрибут был установлен на LinearLayout
, так как теперь он действует как ящик. В своем основном макете просто переместите android:layout_gravity="left"
с ListView
на LinearLayout
.