#android #layout
#Android #макет
Вопрос:
Привет, я создаю динамические линейные макеты и текстовые представления внутри и устанавливаю события onclick для каждого textview, но поскольку данные из запроса sqlite, который я делаю, большие, для завершения привязки требуется много времени (около 5-6 секунд), может ли кто-нибудь направить меня к гораздо более эффективному способу сделать то, что я делаюхотите достичь? Я не могу использовать ListView, потому что это продолжающийся текст, который не должен быть разделен, я попытался вызвать
я пытался сделать что-то вроде этого
onCreate(...){...
Runnable r = new Runnable() {
public void run() {
filldata(BID,CID);// add 30 views
}
};
LinearEn.post(r);// this is the main linearlayout that i add views and layers to it
}
public void filldata(idB, idC){
....
for(i=0;i<VerseArr.length;i ){ // this is the for loop that holds select query sqlite
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout Infant1Layout = new LinearLayout(Reads.this);
LinearLayout Infant2Layout = new LinearLayout(Reads.this);
LinearLayout.LayoutParams linearParams2 = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
linearParams2.gravity=Gravity.CENTER;
Infant2Layout.setLayoutParams(linearParams2);
LinearLayout.LayoutParams linearParams1 = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
linearParams1.gravity=Gravity.CENTER;
linearParams1.setMargins(0,0,15,0);
Infant1Layout.setLayoutParams(linearParams1);
Infant1Layout.setOrientation(LinearLayout.HORIZONTAL);
TextView BookTxt=new TextView(Reads.this);
TextView BookVerseNum=new TextView(Reads.this);
BookTxt.setText(Html.fromHtml("<font color='#FFFFFF'>" VerseArr[i] "<font>"));
BookTxt.setTypeface(tf);
BookTxt.setFadingEdgeLength(10);
BookTxt.setTextSize(17.2f);
int currentAPIVersion = android.os.Build.VERSION.SDK_INT;
if (currentAPIVersion >= android.os.Build.VERSION_CODES.HONEYCOMB) {
BookTxt.setTextIsSelectable(true);
}
BookTxt.setPadding(0, dpToPx(3), dpToPx(5), 0);
BookVerseNum.setText(Html.fromHtml("<small><font color='#F9F9F9'>" (i 1) "<font></small>"));
BookVerseNum.setTypeface(tf);
BookVerseNum.setFadingEdgeLength(10);
BookVerseNum.setTextSize(20.2f);
BookVerseNum.setPadding(dpToPx(valuePad), dpToPx(3), dpToPx(5), dpToPx(3));
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
params.setMargins(0,0, 0, 4);
linearLayout.setLayoutParams(params);
Infant1Layout.addView(BookVerseNum);
View v = new View(this);
v.setLayoutParams(new LinearLayout.LayoutParams(
1,LayoutParams.MATCH_PARENT));
v.setBackgroundColor(Color.parseColor("#B3B3B3"));
v.setPadding(dpToPx(15), 0, dpToPx(15), dpToPx(3));
Infant1Layout.addView(v);
Infant2Layout.addView(BookTxt);
linearLayout.addView(Infant1Layout);
linearLayout.addView(Infant2Layout);
LinearEn.addView(linearLayout);
}
}
Комментарии:
1. Я думаю, что если вы создадите XML-макет (ы) и обработаете их в коде, это может быть полезно.
2. Почему бы вам не создать свой вид с помощью файла XML-макета? Трудно сказать, какое представление вы пытаетесь создать, но оно в значительной степени похоже на список или что-то подобное.
3. просто используйте ListView, я не вижу причин, по которым вы не можете этого сделать
4. потому что мне иногда нужно создать 30 макетов, а иногда 10
5. @Deron: A
ListView
обработает это автоматически. Все, что вам нужно сделать, это создать XML-макет элемента списка, а затем использовать его с каким-тоAdapter
сListView
помощью . Android хорош в таких вещах и очень быстр.
Ответ №1:
Да, потому что
for(i=0;i<VerseArr.length;i )
здесь на основе VerseArr.length
, скажем, 20, будет создано столько просмотров, что это займет время, иногда, если их будет больше, скажем, 300 или около того, это может также дать нам ООМ.
Но все же я пробовал динамически создавать представления для 4-5 или около того, но это не займет так много времени, что я могу вам предложить, так это сохранить готовые данные, которые необходимо добавить, и попытаться reuse the views instead of creating it every time