Как разбить длинный текст на страницы в Android?

Я знаю, что этот вопрос был задан на stackru, ( Ссылка на оригинальный вопрос)

Я следовал предложенному там решению и получил несколько ошибок. (Я хотел спросить только в комментариях, но думаю, что у меня недостаточно репутации, чтобы спрашивать в комментариях помеченный ответ).Мой оригинальный вопрос такой же: "Я хочу разбить текст на страницы"

Ошибки, возникшие в предоставленном ответе (ссылка размещена выше) - 1. После рассказа о классе PageSplitter поставщик решения (mixel) заявил следующее -

... Затем с помощью метода PageSplitter.getPages() вы можете получить оригинальный текст, разбитый на страницы, и поместить каждый из них в TextView:

pageView.setAdapter(new TextPagerAdapter(getSupportFragmentManager(), pageSplitter.getPages()));

Я думаю, что здесь он имел в виду pagesView, (моя реальная проблема написана ниже, упоминая об этом на случай, если я что-то упустил.)

  1. Это реальная проблема, с которой я сталкиваюсь - в классе 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 - я не опубликовал ответ здесь, так как он уже находится на самом стеке. Но, если вы все еще попросите меня, я буду. Благодарю.

0 ответов

Другие вопросы по тегам