app:showAsAction="never" <!--Эта строчка означает, что "значок меню" никогда показан не будет-->
app:showAsAction="always"
getFragmentSupportManager()
вместо getFragmentManager().beginTransaction()
Fragment profileFragment = new Fragment();
Fragment profileFragment = new ProfileFragment();
И сам layout файл:
R.id.mainLayout
? Это FrameLayout или fragment, находящийся внутри layout-а активности?public SpriteBatch batch
, там даже модификатор доступа не стоит, то есть доступ в пределах пакета.import java.util.Arrays;
public final class LongestSubstringFinder {
private LongestSubstringFinder() {}
public static String findLongestSubstringAtString(String string) {
string = string.replaceAll("\\s+", " ");
int quantityOfSuffixes = string.length();
String[] suffixes = new String[quantityOfSuffixes];
for (int i = 0; i < quantityOfSuffixes; i++) {
suffixes[i] = string.substring(i, quantityOfSuffixes);
}
Arrays.sort(suffixes);
String longestRepeatedSubstring = "";
for (int i = 0; i < quantityOfSuffixes - 1; i++) {
String x = findLongestCommonPrefixOfTwoStrings(suffixes[i], suffixes[i + 1]);
if (x.length() > longestRepeatedSubstring.length()) {
longestRepeatedSubstring = x;
}
}
return longestRepeatedSubstring;
}
private static String findLongestCommonPrefixOfTwoStrings(String first, String second) {
int quantity = Math.min(first.length(), second.length());
for (int i = 0; i < quantity; i++) {
if (first.charAt(i) != second.charAt(i))
return first.substring(0, i);
}
return first.substring(0, quantity);
}
}
@Test
public void testFindLongestSubstringAtStringFirst() throws Exception {
String testString = "Сайт toster, бла бла бла Сайт toster";
String neededResult = "Сайт toster";
String longestSubstring = LongestSubstringFinder
.findLongestSubstringAtString(testString);
assertEquals(longestSubstring, neededResult);
}
@Test
public void testFindLongestSubstringAtStringSecond() throws Exception {
String testString = "aboibooolsabbooolsadf";
String neededResult = "booolsa";
String longestSubstring = LongestSubstringFinder
.findLongestSubstringAtString(testString);
assertEquals(longestSubstring, neededResult);
}
SharedPreferences
или БД, но они легко будут обходиться переустановкой приложения или сменой даты на устройстве).Drawable first = imageViewFirst.getDrawable();
Drawable second = imageViewSecond.getDrawable();
Drawable.ConstantState stateFirst = first.getConstantState();
Drawable.ConstantState stateSecond = second.getConstantState();
if(stateFirst.equals(stateSecond)) {
// ваш код
}
Drawable imageViewDrawable = imageViewFirst.getDrawable();
Drawable.ConstantState imageViewDrawableState =imageViewDrawable.getConstantState();
Drawable fromResourcesDrawable = getResources().getDrawable(R.drawable.my_drawable);// ваш ресурс
Drawable.ConstantState fromResourcesState = fromResourcesDrawable.getConstantState();
if(imageViewDrawable.equals(fromResourcesState)) {
// ваш код
}
Android M
permissions нужно также проверять во время выполнения.public static final int NUMBER_OF_REQUEST = 23401;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int canRead = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
int canWrite = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (canRead != PackageManager.PERMISSION_GRANTED || canWrite != PackageManager.PERMISSION_GRANTED) {
//Нужно ли нам показывать объяснения , зачем нам нужно это разрешение
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
//показываем объяснение
} else {
//просим разрешение
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE}, NUMBER_OF_REQUEST);
}
} else {
//ваш код
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case NUMBER_OF_REQUEST: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.e("TAG", "Пользователь дал разрешение");
} else {
Log.e("TAG", "Пользователь отклонил разрешение");
}
return;
}
}
}
useDelimiter(Pattern)
иfindInLine(Pattern)
, которые позволяют моментально искать разделители, поэтому для .csv
файлов лучше использовать его..replace(search, replace)
на .replaceAll(search, replace)
public static void main(String[] args) throws IOException {
String fileName = "D:\\com.company\\shared\\JsonData.xml";
String search = "(Apples = (\\d+))";
String replace = "Apples = 5555";
Charset charset = StandardCharsets.US_ASCII;
Path path = Paths.get(fileName);
Files.write(path,
new String(Files.readAllBytes(path), charset).replaceAll(search, replace)
.getBytes(charset));
}
<?xml version="1.0" encoding="US-ASCII"?>
<xs:element name="apple" type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<apple>Apples = 13</apple>
<apple>Fake</apple>
<apple>Apples = 11</apple>
</xs:element>
<?xml version="1.0" encoding="US-ASCII"?>
<xs:element name="apple" type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<apple>Apples = 5555</apple>
<apple>Fake</apple>
<apple>Apples = 5555</apple>
</xs:element>
layout
вашей Activity
(одна в папке layout
(для смартфонов), а другая в папке - layout-large
(для планшетов)).В layout
для планшетов вставляете не только fragment
с вашим списком вариантов, но и FrameLayout
для отображения информации по объекту из списка.Activity
по нажатию на элемент списка вариантов пишите примерно такой код:if (myFrameLayout != null) { // FrameLayout существует только в layout для планшетов
showInforamtionAtDetailFragment(); //поэтому если он существует - показываем информацию во фрагменте
else {
openDetailActivity(); // иначе - у нас смартфон, потому что layout не существует;открываем отдельную Activity
}