Я работаю над приложением, в котором вы можете выполнить несколько тестов выбора, которые являются основным экраном на ViewPager и фрагментах, где на каждой странице viewpager один вопрос теста, и приложение работает достаточно хорошо, но есть что-то, чего я не могу достичь:Сообщение «Загрузка данных ...» на каждой странице фрагмента
Вопросы и ответы могут быть загружены из внутренней базы данных приложений sqlite, и они имеют текст, отформатированный с помощью некоторого html и отображаемый с помощью три веб-просмотров, а иногда и конкретные страницы занимают больше времени, чтобы полностью выполнить рендеринг, и когда я говорю «занимай больше времени», я не говорю о миллисекундах, может быть, в некоторых случаях они могут занять до двух-трех секунд, чтобы полностью отобразиться (очень редко, но бывает), поэтому я хотел бы показать сообщение в форме «Загрузка Dat a ... ", чтобы пользователи знали, что происходит.
Мне удалось создать приятный мигающий текст TextView, и я начну показывать его в самом начале «onCreateView» и отключить его (с помощью textView.setText («»)) в самом конце того же «onCreateView», метод, который включает метод drawPageN(), где отображаются все элементы страницы, но я не могу заставить его работать, поскольку появляется мигающая «Загрузка данных ...», но сразу исчезает, не отражая реального времени рендеринга, иногда страница все еще не полностью отображается, и сообщение уже исчезло.
Я пробовал другие методы, такие как «onViewCreated», чтобы отключить сообщение «загрузить текст», но результатов нет.
Я думал о «onPreExecute» и «onPostExecute», но для этого мне нужно выполнять задачи в «doItOnBackgroung» и не удается обновить интерфейс в фоновом потоке.
ОК, я думаю, что моя цель «в концепции» проста, но мне нужна помощь в том, как реализовать рабочую версию, скажем, где запустить индикатор прогресса и где его отключить.
Заранее спасибо.
Edit:
Я пытался Soba предложение использовать AsyncTask с onPreExecute, doInBackground и onPostExecute, но теперь он выдает ошибку при попытке раздуть точки зрения, и это определенно указывает на первый WebView в XML, поэтому я вставляю код и сообщение об ошибке в случае, если он помогает больше.
public static class TestSectionFragment extends Fragment { //static
private static final String ARG_SECTION_NUMBER = "section_number";
private WebView webViewInstructions, webViewQuestion;
private LinearLayout ll, llTvQuestionInstructions;
private int res;
public TestSectionFragment() {
}
class asyncDrawPage extends AsyncTask<String, Integer, View> {
LayoutInflater inflater;
ViewGroup container;
@Override
protected View doInBackground(String... strConfig) {
View rootView;
Bundle arguments = getArguments();
int pageNumber = arguments.getInt(ARG_SECTION_NUMBER);
if (strTheme.equals(testMe.theme_vivid)) {
rootView = inflater.inflate(R.layout.activity_test_vivid, container, false);
}else{
rootView = inflater.inflate(R.layout.activity_test, container, false);
}
String testName = test.getTestName();
int testCategory = test.getIdCategory();
int questionsCount = test.getQuestions().size();
drawPageN(rootView, pageNumber, testCategory, testName, questionsCount, strTheme);
return rootView;
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
asyncDrawPage asyncDraw = new asyncDrawPage();
asyncDraw.inflater = inflater;
asyncDraw.container = container;
View rootView = null;
try {
rootView = asyncDraw.execute().get();
} catch (java.lang.InterruptedException e) {
e.printStackTrace();
} catch (java.util.concurrent.ExecutionException e) {
e.printStackTrace();
}
return rootView;
}
}
drawPageN - это метод, который заполняет все виды (TextViews, WebViews и т. Д.).
И сообщение об ошибке (которое я должен был сократить, как это слишком долго, кстати):
01-23 10:09:33.133 24469-24469/com.testMe.testMe W/System.err: java.util.concurrent.ExecutionException: android.view.InflateException: Binary XML file line #74: Binary XML file line #74: Error inflating class android.webkit.WebView
01-23 10:09:33.134 24469-24529/com.testMe.testMe E/testMeLogging: [Error] UncaughtExceptionHandler threade = Thread[AsyncTask #3,5,main], error java.lang.RuntimeException: An error occurred while executing doInBackground()
01-23 10:09:33.135 24469-24469/com.testMe.testMe W/System.err: at java.util.concurrent.FutureTask.report(FutureTask.java:94)
01-23 10:09:33.135 24469-24516/com.testMe.testMe W/System.err: at java.lang.RuntimeException: An error occurred while executing doInBackground()
01-23 10:09:33.135 24469-24516/com.testMe.testMe W/System.err: at android.os.AsyncTask$3.done(AsyncTask.java:309)
01-23 10:09:33.135 24469-24516/com.testMe.testMe W/System.err: at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
01-23 10:09:33.135 24469-24469/com.testMe.testMe W/System.err: at java.util.concurrent.FutureTask.get(FutureTask.java:164)
01-23 10:09:33.135 24469-24516/com.testMe.testMe W/System.err: at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
01-23 10:09:33.135 24469-24469/com.testMe.testMe W/System.err: at android.os.AsyncTask.get(AsyncTask.java:498)
01-23 10:09:33.135 24469-24516/com.testMe.testMe W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:242)
01-23 10:09:33.136 24469-24469/com.testMe.testMe W/System.err: at com.testMe.testMe.ActivityTest$TestSectionFragment.onCreateView(ActivityTest.java:1062)
01-23 10:09:33.136 24469-24516/com.testMe.testMe W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
01-23 10:09:33.136 24469-24516/com.testMe.testMe W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
01-23 10:09:33.136 24469-24516/com.testMe.testMe W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
01-23 10:09:33.136 24469-24516/com.testMe.testMe W/System.err: at java.lang.Thread.run(Thread.java:818)
01-23 10:09:33.136 24469-24516/com.testMe.testMe W/System.err: Caused by: android.view.InflateException: Binary XML file line #74: Binary XML file line #74: Error inflating class android.webkit.WebView
01-23 10:09:33.136 24469-24516/com.testMe.testMe W/System.err: at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
01-23 10:09:33.136 24469-24516/com.testMe.testMe W/System.err: at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
01-23 10:09:33.136 24469-24516/com.testMe.testMe W/System.err: at com.testMe.testMe.ActivityTest$TestSectionFragment$asyncDrawPage.doInBackground(ActivityTest.java:1009)
01-23 10:09:33.136 24469-24516/com.testMe.testMe W/System.err: at com.testMe.testMe.ActivityTest$TestSectionFragment$asyncDrawPage.doInBackground(ActivityTest.java:996)
01-23 10:09:33.136 24469-24469/com.testMe.testMe W/System.err: at android.support.v4.app.Fragment.performCreateView(Fragment.java:2087)
01-23 10:09:33.136 24469-24516/com.testMe.testMe W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:295)
01-23 10:09:33.137 24469-24469/com.testMe.testMe W/System.err: at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1113)
01-23 10:09:33.137 24469-24469/com.testMe.testMe W/System.err: at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1295)
01-23 10:09:33.137 24469-24469/com.testMe.testMe W/System.err: at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
01-23 10:09:33.137 24469-24469/com.testMe.testMe W/System.err: at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1643)
01-23 10:09:33.137 24469-24469/com.testMe.testMe W/System.err: at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:679)
01-23 10:09:33.137 24469-24516/com.testMe.testMe W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
01-23 10:09:33.137 24469-24516/com.testMe.testMe W/System.err: ... 4 more
01-23 10:09:33.138 24469-24469/com.testMe.testMe W/System.err: Caused by: android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
01-23 10:09:33.138 24469-24516/com.testMe.testMe W/System.err: at android.view.InflateException: Binary XML file line #74: Error inflating class android.webkit.WebView
01-23 10:09:33.138 24469-24469/com.testMe.testMe W/System.err: android.support.v4.view.ViewPager.populate(ViewPager.java:1272)
01-23 10:09:33.138 24469-24469/com.testMe.testMe W/System.err: at android.support.v4.view.ViewPager.populate(ViewPager.java:1120)
01-23 10:09:33.139 24469-24469/com.testMe.testMe W/System.err: at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1646)
01-23 10:09:33.139 24469-24469/com.testMe.testMe W/System.err: at android.view.View.measure(View.java:18911)
01-23 10:09:33.139 24469-24469/com.testMe.testMe W/System.err: at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
01-23 10:09:33.139 24469-24469/com.testMe.testMe W/System.err: at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
01-23 10:09:33.140 24469-24469/com.testMe.testMe W/System.err: at android.view.View.measure(View.java:18911)
01-23 10:09:33.140 24469-24469/com.testMe.testMe W/System.err: at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5995)
01-23 10:09:33.141 24469-24469/com.testMe.testMe W/System.err: at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
01-23 10:09:33.141 24469-24469/com.testMe.testMe W/System.err: at android.view.View.measure(View.java:18911)
01-23 10:09:33.141 24469-24469/com.testMe.testMe W/System.err: at android.widget.LinearLayout.measureVertical(LinearLayout.java:901)
01-23 10:09:33.141 24469-24469/com.testMe.testMe W/System.err: at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
01-23 10:09:33.142 24469-24469/com.testMe.testMe W/System.err: at android.view.View.measure(View.java:18911)
01-23 10:09:33.142 24469-24469/com.testMe.testMe W/System.err: at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5995)
01-23 10:09:33.142 24469-24469/com.testMe.testMe W/System.err: at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
01-23 10:09:33.142 24469-24469/com.testMe.testMe W/System.err: at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2662)
01-23 10:09:33.143 24469-24469/com.testMe.testMe W/System.err: at android.view.View.measure(View.java:18911)
01-23 10:09:33.144 24469-24469/com.testMe.testMe W/System.err: at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2157)
01-23 10:09:33.146 24469-24469/com.testMe.testMe W/System.err: at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1261)
01-23 10:09:33.146 24469-24469/com.testMe.testMe W/System.err: at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1498)
01-23 10:09:33.146 24469-24469/com.testMe.testMe W/System.err: at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1140)
01-23 10:09:33.146 24469-24469/com.testMe.testMe W/System.err: at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6232)
01-23 10:09:33.147 24469-24469/com.testMe.testMe W/System.err: at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
01-23 10:09:33.147 24469-24469/com.testMe.testMe W/System.err: at android.view.Choreographer.doCallbacks(Choreographer.java:670)
01-23 10:09:33.147 24469-24469/com.testMe.testMe W/System.err: at android.view.Choreographer.doFrame(Choreographer.java:606)
01-23 10:09:33.147 24469-24469/com.testMe.testMe W/System.err: at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
01-23 10:09:33.147 24469-24469/com.testMe.testMe W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
01-23 10:09:33.147 24469-24469/com.testMe.testMe W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
01-23 10:09:33.147 24469-24469/com.testMe.testMe W/System.err: at android.os.Looper.loop(Looper.java:148)
01-23 10:09:33.148 24469-24469/com.testMe.testMe W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5551)
01-23 10:09:33.148 24469-24469/com.testMe.testMe W/System.err: at java.lang.reflect.Method.invoke(Native Method)
01-23 10:09:33.148 24469-24469/com.testMe.testMe W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)...
Редактировать 3: В соответствии с предложениями добавлены несколько методов.
@SuppressLint("SetJavaScriptEnabled")
public void drawPageN(View view, int pageNumber, int testCategory,
String testName, int questionsCount, String strTheme) {
String htmlText;
Context context = this.getActivity();
tvFetchingData = (TextView) view.findViewById(R.id.llBody).findViewById(R.id.tvBlinking);
tvFetchingData.setTextColor(Color.BLACK);
tvFetchingData.setText("Loading data...");
GeneralUtils.blinkText(tvFetchingData);
if (test.getQuestions() != null) {
Question question = test.getQuestions().get(pageNumber);
if (question.getInstructions()!=null){
webViewInstructions = (WebView) view.findViewById(R.id.llBody)
.findViewById(R.id.llTvQuestionInstructions)
.findViewById(R.id.webViewInstructions);
llTvQuestionInstructions = (LinearLayout) view.findViewById(R.id.llBody)
.findViewById(R.id.llTvQuestionInstructions);
//webViewInstructions.setWebViewClient(new WebViewClient());
//webViewInstructions.setWebViewClient(new MYWEBCLIENT());
webViewInstructions.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
@Override
public void onPageFinished(WebView view, String url) {
if (webViewQuestion.getVisibility() != View.VISIBLE) {
webViewQuestion.setVisibility(View.VISIBLE);
}
}
});
webViewInstructions.getSettings().setJavaScriptEnabled(true);
webViewInstructions.getSettings().setDomStorageEnabled(true);
webViewInstructions.setLayerType(View.LAYER_TYPE_NONE, null);
webViewInstructions.setBackgroundColor(Color.argb(1, 0, 0, 0));
//remove copy text
webViewInstructions.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return true;
}
});
webViewInstructions.setLongClickable(false);
webViewInstructions.setTag(true);
TestUtils.setZoom(webViewInstructions, null, context);
htmlText = getHtmlText(question.getInstructions());
webViewInstructions.loadDataWithBaseURL("", htmlText, "text/html", "UTF-8", "");
} else {
llTvQuestionInstructions.setVisibility(View.GONE);
}
webViewQuestion = (WebView) view.findViewById(R.id.llBody)
.findViewById(R.id.llTvQuestion)
.findViewById(R.id.webViewQuestion);
//webViewQuestion.setWebViewClient(new WebViewClient());
//webViewQuestion.setWebViewClient(new MYWEBCLIENT());
webViewQuestion.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
@Override
public void onPageFinished(WebView view, String url) {
if (webViewQuestion.getVisibility() != View.VISIBLE) {
webViewQuestion.setVisibility(View.VISIBLE);
tvFetchingData.setText("Data loaded...");
}
}
});
webViewQuestion.getSettings().setJavaScriptEnabled(true);
webViewQuestion.getSettings().setDomStorageEnabled(true);
webViewQuestion.setBackgroundColor(Color.argb(1, 0, 0, 0));
//remove copy text
webViewQuestion.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return true;
}
});
webViewQuestion.setLongClickable(false);
TestUtils.setZoom(webViewQuestion, null, context);
//set webview text
htmlText = getHtmlText(question.getQuestion());
webViewQuestion.loadDataWithBaseURL("", htmlText, "text/html", "UTF-8", "");
//ANSWERS
generatePossibleAnswersCheckBoxes(test.getQuestions().get(pageNumber), view, pageNumber);
// get the image name according to category, test number and
// question number
// example: c1-t1-q15.png
// String imageName = "c" + String.valueOf(testCategory) + "t"
// + testName + "q" + String.valueOf(pageNumber + 1);
String imageName = question.getImage();
if (imageName!=null) {
res = getResources().getIdentifier(question.getImage(), "drawable",
context.getPackageName());
if (res != 0) {
//set the red text indicating there is an image below
TextView tvImgInstructions = (TextView) view.findViewById(R.id.llBody)
.findViewById(R.id.llTvImgInstructions)
.findViewById(R.id.tvImgInstructions);
ApplicationConfiguration testMe = new ApplicationConfiguration();
String imageInstructionsTextColor = testMe.imageInstructionsTextColor;
tvImgInstructions.setTextColor(Color.parseColor(imageInstructionsTextColor));
tvImgInstructions.setText(GeneralUtils.getStringResourceByName(
"textview_activitytest_imginstructions", context));
TestUtils.setZoom(null, tvImgInstructions, context);
//get dimensions of question image
Drawable d = getResources().getDrawable(res);
int w = d.getIntrinsicWidth();
int h = d.getIntrinsicHeight();
//set img width and heigth to 90% of screen size to fit in screen
int screenWidth = GeneralUtils.getScreenWidth(context);
int imgWidth = (int)(screenWidth * 0.98);
int wScaleFactor = imgWidth*100/w;
int imgHeigth = h*wScaleFactor/100;
ImageView imgQuestion = new ImageView(context);
imgQuestion.setPadding(0, 50, 0, 0);
imgQuestion.setId(R.id.imgQuestionX);
imgQuestion.setTag(imageName);
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(imgWidth, imgHeigth);
imgQuestion.setLayoutParams(parms);
//set a border for the image
imgQuestion.setAdjustViewBounds(true);
imgQuestion.setScaleType(ScaleType.CENTER_INSIDE);
imgQuestion.setBackgroundColor(Color.BLACK);
imgQuestion.setPadding(1,1,1,1);
imgQuestion.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
imgQuestion.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Context context = v.getContext();
String imgTag = (String) v.getTag();
Bundle bImageData = new Bundle();
bImageData.putString("imgTag", imgTag);
bImageData.putString("testName", test.getTestName());
Intent intent = new Intent(
context,
ActivityImgFullScreen.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.putExtras(bImageData);
startActivity(intent);
}
});
ll = ((LinearLayout) view.findViewById(R.id.llQuestionImage));
ll.addView(imgQuestion);
imgQuestion.setImageResource(res);
} else {
//for now used in literature for poems and additional text
//TODO: make a special field for text
TextView tvAdditionalText = new TextView(context);
String additionalText = question.getImage();
tvAdditionalText.setTextColor(Color.BLACK);
int screenWidth = GeneralUtils.getScreenWidth(context);
int screenHeight = GeneralUtils.getScreenHeight(context);
float textSize = GeneralUtils.getTextSize(additionalText, screenWidth, screenHeight) * 3;
tvAdditionalText.setTextSize(textSize);
tvAdditionalText.setText(additionalText);
ll = ((LinearLayout) view.findViewById(R.id.llQuestionImage));
ll.addView(tvAdditionalText);
}
}
}
if (webViewInstructions.getTag().equals(true)){
webViewInstructions.setPadding(0, 0, 0, 0);
}
//add extra space so question image can be scrolled up and seen completely
//the space added is double the end test linear layout height
int llHeight=0;
if (img != null) {
llHeight = (img.getIntrinsicHeight()); // the heigth of the end test image
}
LinearLayout llSpacer = new LinearLayout(context);
LinearLayout.LayoutParams parmsSpacer = new LinearLayout.LayoutParams(llHeight, llHeight);
llSpacer.setLayoutParams(parmsSpacer);
ll.addView(llSpacer);
String strQuestion = GeneralUtils.getStringResourceByName("activitytest_labelview_question", context);
String pagerTextNoArrows=strQuestion + " "
+ Integer.toString(pageNumber + 1) + "/"
+ questionsCount;
if (strTheme.equals(testMe.theme_vivid)) {
TextView tvQuestionNumber = (TextView) view.findViewById(R.id.tvQuestionNumber);
tvQuestionNumber.setText(pagerTextNoArrows);
}else{
String pagerText = "↑ " + pagerTextNoArrows + " ↓";
VerticalLabelView vertical;
int defFontSize = GeneralUtils.getPrefsByScreenDensity(this.getActivity())[5];
ll = ((LinearLayout) view.findViewById(R.id.llVerticalPager));
int paddingLeft = GeneralUtils.dp2px(5, context);
int paddingBottom = GeneralUtils.dp2px(100, context);
ll.setPadding(paddingLeft, 0, 0, paddingBottom);
if (strTheme.equals(testMe.theme_blue)){
ll.setBackgroundColor(Color.parseColor(testMe.btnStartColor_blue));
}
vertical = new VerticalLabelView(context);
vertical.setTextColor(Color.WHITE);
vertical.setText(pagerText);
vertical.setTextSize(GeneralUtils.dp2px(defFontSize, this.getActivity()));
ll.addView(vertical);
}
}
@SuppressLint("SetJavaScriptEnabled")
private void generatePossibleAnswersCheckBoxes(final Question question,
View view, final int pageNumber) {
Context context = view.getContext();
String htmlText="";
int i = 0;
final List<Answer> answers = question.getAnswers();
nroAnswers = answers.size();
if (ll != null) {
ll.removeAllViews();
}
if (answers != null) {
for (Answer rbAnswer : answers) {
int cbIndex = answers.size()*pageNumber+i;
// linear layout to hold image checkbox and checkbox text
LinearLayout llCheckBox = new LinearLayout(context);
llCheckBox.setOrientation(LinearLayout.HORIZONTAL); // horizontal
llCheckBox.setGravity(Gravity.CENTER_VERTICAL);
llCheckBox.setPadding(0, 0, 0, 5);
//webview for answer
final WebView webView = new WebView(context);
webView.setVisibility(View.INVISIBLE);
//webView.setWebViewClient(new WebViewClient());
//webView.setWebViewClient(new MYWEBCLIENT());
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
@Override
public void onPageFinished(WebView view, String url) {
if (webView.getVisibility() != View.VISIBLE) {
webView.setVisibility(View.VISIBLE);
}
}
});
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.setBackgroundColor(Color.argb(1, 0, 0, 0));
webView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return true;
}
});
webView.setLongClickable(false);
htmlText = getHtmlText(rbAnswer.getAnswer());
webView.loadDataWithBaseURL("", htmlText, "text/html", "UTF-8", "");
TestUtils.setZoom(webView, null, context);
// checkbox i
cbAnswer[cbIndex] = new ImageView(context);
cbAnswer[cbIndex].setTag("[email protected]" + rbAnswer.getIdAnswer()+ "@" + pageNumber); // 0=>unchecked|1=>checked
cbAnswer[cbIndex].setId(cbIndex);
// determine if checkbox is checked or not according to what
// is stored in array of already answered questions
int answeredInCurrentPage = test.getAnsweredQuestions().get(pageNumber).getIdAnswer();
if (rbAnswer.getIdAnswer() == answeredInCurrentPage) {
if (voicerecognitionPreference){
cbAnswer[cbIndex].setImageResource(R.drawable.checkbox_checked_say);
}else{
cbAnswer[cbIndex].setImageResource(R.drawable.checkbox_checked);
}
} else {
if (voicerecognitionPreference){
cbAnswer[cbIndex].setImageResource(R.drawable.checkbox_unchecked_say);
}else{
cbAnswer[cbIndex].setImageResource(R.drawable.checkbox_unchecked);
}
}
int cbPadBottom = 5;
int cbPadTop = 5;
int cbPadRight = 15;
int cbPadLeft = 0;
cbAnswer[cbIndex].setPadding(cbPadLeft, cbPadTop, cbPadRight, cbPadBottom);
// add elements to linear layout
// create and add textview with "tooltip" say nro.
if (voicerecognitionPreference){
addTextViewSay(llCheckBox, i+1);
}
llCheckBox.addView(cbAnswer[cbIndex]);
llCheckBox.addView(webView);
cbAnswer[cbIndex].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Context context = v.getContext();
//play click sound
SoundManager.playSound(context, testMe.getDefaultCheckBoxClickSound(), testMe.getSoundType()[0]);
ImageView cbSelected = (ImageView) v;
//String strRest = cbSelected.getTag().toString().substring(1);
//cbAnswer[cbIndex].setTag("1"+strRest);
int cbSelectedId = cbSelected.getId();
int cbSelectedTagId = Integer.parseInt(cbSelected.getTag().toString().split("@")[1]);
for (int j = 0; j < answers.size(); j++) {
int cbIndex = answers.size()*pageNumber+j;
boolean isSelected = cbAnswer[j].getTag().toString().substring(0, 1).equals("1");
if (cbIndex != cbSelectedId) {
// (cbAnswer[j].get
// .isChecked()==true &&
// j!=cbSelectedId)
if (voicerecognitionPreference){
cbAnswer[cbIndex].setImageResource(R.drawable.checkbox_unchecked_say);
}else{
cbAnswer[cbIndex].setImageResource(R.drawable.checkbox_unchecked);
}
String strRest = cbAnswer[cbIndex].getTag().toString().substring(1);
cbAnswer[cbIndex].setTag("0"+strRest);
} else {
String cbAnswerJTag = cbAnswer[cbIndex].getTag().toString();
String cbAnswerJState = cbAnswerJTag.split("@")[0];
if (cbAnswerJState.equals("1")) { // 0=>unchecked|1=>checked
if (voicerecognitionPreference){
cbAnswer[cbIndex].setImageResource(R.drawable.checkbox_unchecked_say);
}else{
cbAnswer[cbIndex].setImageResource(R.drawable.checkbox_unchecked);
}
cbAnswer[cbIndex].setTag("[email protected]" + cbAnswerJTag.split("@")[1]);
} else {
if (voicerecognitionPreference){
cbAnswer[cbIndex].setImageResource(R.drawable.checkbox_checked_say);
}else{
cbAnswer[cbIndex].setImageResource(R.drawable.checkbox_checked);
}
cbAnswer[cbIndex].setTag("[email protected]" + cbAnswerJTag.split("@")[1]);
}
}
}
test.getAnsweredQuestions().get(pageNumber).setIdAnswer(cbSelectedTagId);
test.getAnsweredQuestions().get(pageNumber).setIdQuestion(question.getIdQuestion());
}
});
ll = ((LinearLayout) view.findViewById(R.id.cbLayout));
ll.addView(llCheckBox);
i++;
}
}
}
Это происходит потому, что ViewPager загружает первые три экрана всегда. Например, экран с левой стороны <> Ваш экран <> Правый боковой экран. Таким образом, вы можете проверить, что ваш код должен работать, комментируя другие задачи async (слева и справа). –
Большое спасибо за ваш ответ Charitha, я проверял, и у меня нет других задач async, работающих на этом экране, поэтому не уверен, что это может быть проблемой. –
В качестве дополнительной информации на каждой странице фрагмента при рисовании каждой страницы я не делаю никаких специальных (или важных, трудоемких или сетевых) вычислений, просто считывая данные из ранее созданного массива, который считывает данные из sqlite, проблема заключается в том, что это на некоторых страницах пейджера просмотра (происходит случайным образом) требуется больше времени для полного отображения содержимого веб-страниц, поэтому я хотел бы показать пользователю какое-то сообщение. –