Умная галерея Android с несколькими действиями по выбору изображения.
Сначала сделайте кнопку для действия, и вы можете использовать ее для single / multiple
Для выбора одиночного изображения : - - luminous.ACTION_PICK для выбора одного изображения.
Для выбора нескольких изображений : - - luminous.ACTION_MULTIPLE_PICK для выбора нескольких изображений.
MainActivity.java
// For single image
Intent i = new Intent(Action.ACTION_PICK);
startActivityForResult(i, 100);
// For multiple images
Intent i = new Intent(Action.ACTION_MULTIPLE_PICK);
startActivityForResult(i, 200);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100 && resultCode == Activity.RESULT_OK) {
adapter.clear();
viewSwitcher.setDisplayedChild(1);
String single_path = data.getStringExtra("single_path");
imageLoader.displayImage("file://" + single_path, imgSinglePick);
} else if (requestCode == 200 && resultCode == Activity.RESULT_OK) {
String[] all_path = data.getStringArrayExtra("all_path");
ArrayList dataT = new ArrayList();
for (String string : all_path) {
CustomGallery item = new CustomGallery();
item.sdcardPath = string;
dataT.add(item);
}
viewSwitcher.setDisplayedChild(0);
adapter.addAll(dataT);
}
}
В AndroidManifest.xml
Причина такого поведения соответствия scala-шаблонов лежит в системе типов. Scala имеет очень прочную систему типов, которая обеспечивает высокую степень безопасности и улавливает ошибки во время компиляции. Если вы объявляете функцию с параметром вместо Any, она также выдает ту же ошибку.
Для ex: -
def echoWhatYouGaveMe(x: (Int, Int)): String = x match {
case (a, b) => s"got $a and $b"
case (a, b, c) => s"got $a, $b, and $c"
case _ => "Unknown"
}
echoWhatYouGaveMe((1,2))
Вы получаете сообщение об ошибке
Error:(4, 9) constructor cannot be instantiated to expected type;
found : (T1, T2, T3)
required: (Int, Int)
case (a, b, c) => s"got $a, $b, and $c"
^
Если вы изменяете свой val myTuple и явно устанавливаете его тип в Any, это позволит вам выполнить сопоставление с образцом.
val myTuple: Any = (1, 2, 3)
val toPrint = myTuple match {
case (a, b, c) => s"got $a, $b, and $c"
case (a, b) => s"got $a and $b"
case _ => s"Unknown data"
}
Вы получаете такой же результат
myTuple: Any = (1,2,3)
toPrint: String = got 1, 2, and 3
Когда вы пишете
val myTuple = (1, 2, 3)
, тип myTuple
считается (Int, Int, Int)
. Поэтому, когда вы match
, все шаблоны должны быть совместимы с этим типом, т. Е. Должны быть значения этого типа, которые бы соответствовали шаблону. В противном случае шаблон бесполезен и может быть удален. case (a, b)
- такая бесполезная картина.
В фрагменте 1 шаблон не бесполезен, потому что является совместимым с Any
.