私は、リストからプログラムで作成されたボタンのスクロール可能なリスト(列と言う)を生成するアクティビティをsqliteテーブルの読み込みの結果であり、画面の初期ペイントが遅くなっている(ボタンの数が増えている)ので、私はこれに対する解決策を探しています。プログラマチックに作成された大きなボタンの表示を高速化する
最初はスレッド(実行可能ファイル、ハンドラなど)を使用することを考えましたが、Forの内部に新しいスレッドを作成してリストを反復処理しますが、動作していません(少なくとも私は実行できません私の質問は次のようです:
リストから始めて、スクロール可能なボタンの大きなセットを作成する最も適切な方法は、ユーザーが画面にアクセスするときにそのような遅延がないようにすることです。
ページネーションはオプションになる可能性がありますが、最初に他の可能性について知りたい場合は、最後のリソースとして残しておきます。
ありがとうございます、以下は私のコードです。
public static void createButtons(LinearLayout llContainer,
List<TestType> TestTypes, List<Test> Tests,
int buttonFontSize) {
Context oContext = llContainer.getContext();
String strTheme = TMAppearance.getThemeFromPreferences(oContext);
testMe = ((ApplicationConfiguration)oContext.getApplicationContext());
int callerActivity = TestTypes!=null ? 2 : 1;
if (TestTypes!=null || Tests!=null) {
int lCols = strTheme.equals(testMe.theme_vivid) ? 1 : 2;
//int sourceElementIndex = 0;
int originListSize = calculateOriginalListSize(callerActivity, TestTypes, Tests);
int lRows = (int) Math.ceil((double)originListSize/lCols);
List<String> aStartColors = TMUtils_ThemeVivid.generateStartColorArray(lRows, oContext);
List<String> aEndColors = TMUtils_ThemeVivid.generateEndColorArray(lRows, oContext);
for (i = 0; i < lRows; i++) {
LinearLayout outerButtonLayout = generateOuterButtonLayout(oContext);
for (j = 0; j < lCols; j++) {
final Thread r = new Thread() {
public void run() {
LinearLayout innerButtonLayout = generateInnerButtonLayout(oContext);
outerButtonLayout.addView(innerButtonLayout, j);
if (sourceElementIndex<originListSize){
final TMButton oButton = new TMButton(oContext);
if (callerActivity==1) { //testMenu
setTestMenuButtonSettings(oButton, sourceElementIndex, Tests);
} else {
if (callerActivity==2) { //testTypeMenu
setTestTypeMenuButtonSettings(oButton, sourceElementIndex, TestTypes);
}
}
if (strTheme.equals(testMe.theme_vivid)){
oButton.fontSize = buttonFontSize;
oButton.gradientStartColor = aStartColors.get(i);
oButton.gradientEndColor = aEndColors.get(i);
}else{
if (strTheme.equals(testMe.theme_purple)){
oButton.gradientStartColor = testMe.btnStartColor_purple;
oButton.gradientEndColor = testMe.btnEndColor_purple;
}
}
configureButton(oButton, callerActivity);
oButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Context oContext = v.getContext();
TMButton oButton = (TMButton) v;
int callerActivity = Integer.valueOf(v.getTag().toString().split("@")[0]);
String sourceId = String.valueOf(v.getTag().toString().split("@")[1]);
if(event.getAction() == MotionEvent.ACTION_DOWN) { //pressed
setButtonPressed(oButton);
TMSound.playButtonSound(oContext);
} else if (event.getAction() == MotionEvent.ACTION_UP) { //released
setButtonReleased(oButton);
startTargetActivity(callerActivity, sourceId, oContext);
}
return true;
}
});
TMAppearance.doButtonAnimation(oContext, oButton, i);
innerButtonLayout.addView(oButton);
sourceElementIndex++;
}
}
};
r.run();
}
llContainer.addView(outerButtonLayout);
}
}
}
)
onClick
イベントが、それはRecycleView
におけるよりも実装が容易であるということであるあなたがに反対している 'ListView'または' RecycleView'の使用についての何かがありますか?カスタムレイアウトを使用することで、柔軟性を高めることができます。 – BarnsBarns52の返事をいただきありがとうございます。もちろん、私はListViewに反対しているわけではありません。実際にボタンがプログラムによって生成されるため、ListViewを実装する方法を調査しています。 問題なく、動的に生成されたボタンでListViewを使用できると思いませんか? –
私はListView(nostalgia?;-))が好きですが、RecyclerViewはListViewと比べて優れたパフォーマンスを持つように導入されました。スクロールするとき。 – 0X0nosugar