Как разбить длинный текст на страницы в Android?
Я знаю, что этот вопрос был задан на stackru, ( Ссылка на оригинальный вопрос)
Я следовал предложенному там решению и получил несколько ошибок. (Я хотел спросить только в комментариях, но думаю, что у меня недостаточно репутации, чтобы спрашивать в комментариях помеченный ответ).Мой оригинальный вопрос такой же: "Я хочу разбить текст на страницы"
Ошибки, возникшие в предоставленном ответе (ссылка размещена выше) - 1. После рассказа о классе PageSplitter поставщик решения (mixel) заявил следующее -
... Затем с помощью метода PageSplitter.getPages() вы можете получить оригинальный текст, разбитый на страницы, и поместить каждый из них в TextView:
pageView.setAdapter(new TextPagerAdapter(getSupportFragmentManager(), pageSplitter.getPages()));
Я думаю, что здесь он имел в виду pagesView
, (моя реальная проблема написана ниже, упоминая об этом на случай, если я что-то упустил.)
- Это реальная проблема, с которой я сталкиваюсь - в классе PageFragment я получаю эту ошибку -
Метод getObjectStorage() не определен для типа PageFragment
в то время как Mixel заявляет о getObjectStorage() -
getObjectStorage() возвращает синглтон SharedObjectStorage, который хранит карту от ключей до слабых ссылок на объекты (это полезно, когда вы хотите поместить пользовательский объект в Bundle):
и я создал отдельный класс с именем SharedObjectStorage, как упомянуто Mixel, но я все еще получаю ошибку.
PageFragment
public class PageFragment extends Fragment {
private final static String PAGE_TEXT = "PAGE_TEXT";
public static PageFragment newInstance(CharSequence pageText) {
PageFragment frag = new PageFragment();
Bundle args = new Bundle();
args.putLong(PAGE_TEXT, getObjectStorage().putSharedObject(pageText));
frag.setArguments(args);
return frag;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
CharSequence text = (CharSequence) getObjectStorage().getSharedObject(getArguments().getLong(PAGE_TEXT));
TextView pageView = (TextView) inflater.inflate(R.layout.page, container, false);
pageView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_size));
pageView.setText(text);
return pageView;
}
}
SharedObjectStorage
public class SharedObjectStorage {
private final Random random = new Random(Calendar.getInstance().getTimeInMillis());
private HashMap<Long, WeakReference<Object>> sharedObjects = new HashMap<Long, WeakReference<Object>>();
public synchronized Long putSharedObject(Object o) {
long key;
do {
key = random.nextLong();
} while (sharedObjects.containsKey(key));
sharedObjects.put(key, new WeakReference<Object>(o));
return key;
}
public synchronized Object getSharedObject(long key) {
if (sharedObjects.containsKey(key)) {
return sharedObjects.get(key).get();
}
return null;
}
}
Есть ли способ обойти это?
PS - я не опубликовал ответ здесь, так как он уже находится на самом стеке. Но, если вы все еще попросите меня, я буду. Благодарю.