내 응용 프로그램은 텍스트 파일 자산에서 많은 양의 데이터를 읽고 TextView에 화면에 표시합니다. (가장 큰 것은 ~ 450k입니다.) 파일을 SpannableStringBuffer으로 읽어들입니다 (섹션 이름과 같이 제거한 일부 메타 데이터가 있기 때문에). 이 접근 방식은 지난 2 년 동안 시장에 앱을 설치했는데 (7k 이상의 활성 장치 설치) 불만없이 효과적이었습니다. 따라서 코드가 합리적으로 정확하다는 것을 알고 있습니다.SpannableStringBuffer는 9,999 자로 제한됩니까?
그러나 텍스트가 잘린 LG Lucid (LGE VS840 4G, Android 2.3.6)의 사용자로부터 최근 보고서를 받았습니다. 로그 항목에서 내 응용 프로그램은 버퍼에 9,999 자 밖에 없습니다. 이 문제는 SpannableStringBuffer과 관련하여 알려진 문제입니까? 큰 Spannable 버퍼를 만드는 다른 권장 방법이 있습니까? 제안 된 해결 방법은 무엇입니까?
SpannableStringBuilder에 추가 할 때마다 업데이트되는 별도의 예상 길이를 유지하는 것 외에 추가 인터페이스가 개체가 아니라 오류를 반환하기 때문에 오류를 감지하는 좋은 방법이 없습니다. 데이터의 읽고
내 코드는 다음과 같습니다
currentOffset = 0;
try {
InputStream is = getAssets().open(filename);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
ssb.clear();
jumpOffsets.clear();
ArrayList<String> sectionNamesList = new ArrayList<String>();
sectionOffsets.clear();
int offset = 0;
while (br.ready()) {
String s = br.readLine();
if (s.length() == 0) {
ssb.append("\n");
++offset;
} else if (s.charAt(0) == '\013') {
jumpOffsets.add(offset);
String name = s.substring(1);
if (name.length() > 0) {
sectionNamesList.add(name);
sectionOffsets.add(offset);
if (showSectionNames) {
ssb.append(name);
ssb.append("\n");
offset += name.length() + 1;
}
}
} else {
if (!showNikud) {
// Remove nikud based on Unicode character ranges
// Does not replace combined characters (\ufb20-\ufb4f)
// See
// http://en.wikipedia.org/wiki/Unicode_and_HTML_for_the_Hebrew_alphabet
s = s. replaceAll("[\u05b0-\u05c7]", "");
}
if (!showMeteg) {
// Remove meteg based on Unicode character ranges
// Does not replace combined characters (\ufb20-\ufb4f)
// See
// http://en.wikipedia.org/wiki/Unicode_and_HTML_for_the_Hebrew_alphabet
s = s.replaceAll("\u05bd", "");
}
ssb.append(s);
ssb.append("\n");
offset += s.length() + 1;
}
}
sectionNames = sectionNamesList.toArray(new String[0]);
currentFilename = filename;
Log.v(TAG, "ssb.length()=" + ssb.length() +
", daavenText.getText().length()=" +
daavenText.getText().length() +
", showNikud=" + showNikud +
", showMeteg=" + showMeteg +
", showSectionNames=" + showSectionNames +
", currentFilename=" + currentFilename
);
인터페이스 찾고 후, 나는 InputFilter들과 함께 showNikud 및 showMeteg 케이스를 교체 할 계획입니다.
'ListView'에서 ('ScrollView'에서)'TextView'를 엄청 많이 만들면 화면에서 스크롤 된'TextView's가 자동으로 recyled됩니까? 'WebView'는 불행히도 옵션이 아니지만 음성 화 된 히브리어 텍스트를 표시하고 안드로이드는 역방향으로 표시합니다 (버그는 ICS에서만 수정 됨). – shmuelp
@shmuelp : "자동으로 recyled 되나요?" - 잘 쓰여진 '어댑터'로 예. – CommonsWare