2016-08-01 20 views
1

Ich brauche drei Bilderreihen, eine unter der anderen. Jede RecyclerView, die scrollbar ist, sitzt unabhängig in jeder Zeile. Ich kam auf die Idee, drei RecyclerView s, eine unter der anderen, und drei Adapter für die RecyclerView s und es sieht sehr gut aus. Das einzige Problem, das ich habe, ist, dass es viel Speicher verbraucht und das Scrollen langsam ist. Ich denke, der Code ist in Ordnung und die RecyclerView s funktionieren auch gut, aber vielleicht verpasse ich etwas oder mache etwas falsch. Hier ist meine Aktivität, die die Adapter festlegt:Drei RecyclerViews in einer Aktivität

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    MobileAds.initialize(getApplicationContext(), "ca-app-pub-XXXXX"); 
    AdView mAdView = (AdView) findViewById(R.id.adView); 
    AdRequest adRequest = new AdRequest.Builder().build(); 
    mAdView.loadAd(adRequest); 

    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.articles); 
    RecyclerView recyclerView2 = (RecyclerView) findViewById(R.id.articles2); 
    RecyclerView recyclerView3 = (RecyclerView) findViewById(R.id.articles3); 

    recyclerView.setHasFixedSize(true); 
    recyclerView2.setHasFixedSize(true); 
    recyclerView3.setHasFixedSize(true); 

    recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); 
    recyclerView2.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); 
    recyclerView3.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); 

    ArrayList<Article> articles = new ArrayList<>(); 
    for (int i = 0; i < 30; ++i) 
     articles.add(new Article()); 

    ArrayList<Article2> articles2 = new ArrayList<>(); 
    for (int i = 0; i < 30; ++i) 
     articles2.add(new Article2()); 

    ArrayList<Article3> articles3 = new ArrayList<>(); 
    for (int i = 0; i < 30; ++i) 
     articles3.add(new Article3()); 

    recyclerView.setAdapter(new MyAdapter(articles, recyclerView)); 
    recyclerView2.setAdapter(new MyAdapter2(articles2, recyclerView2)); 
    recyclerView3.setAdapter(new MyAdapter3(articles3, recyclerView3)); 
} 

Irgendwelche Vorschläge zur Lösung der Speicherprobleme?

Antwort

1

Es gibt Möglichkeiten, den Speicher Ihrer Anwendungen zu erhöhen, sodass mehr im Heap gespeichert werden kann. Ihre Anwendung könnte aufgrund der Images und der Tatsache, dass sie drei verschiedene Adapter auf drei verschiedene RecyclerView s, die Bilder enthalten, festgelegt werden muss, langsam ausgeführt werden. Normalerweise kann das Festlegen eines Bildes ressourcenintensiv sein, wenn man bedenkt, dass Sie drei Reihen davon haben. Sie können versuchen, weniger Bilder zu verwenden, aber das könnte den gesamten Zweck Ihrer Anwendung ruinieren. Ich würde empfehlen, zu betrachten und zu schauen, wo Sie es optimieren könnten.

+0

Vielen Dank für Ratschläge. Ich werde ziemlich viele Bilder haben, ungefähr 30 in jeder Reihe - sie sind nicht groß, aber werden zusammenfassen. Ich frage mich auch, gibt es eine andere oder bessere Möglichkeit, drei unabhängige Scroll-Ansichten in einer Aktivität und Layout zu erreichen? – Pawel

+0

Es gibt wahrscheinlich keinen besseren Weg als solchen. Es hängt wirklich davon ab, was Sie in diesen scrollbaren Ansichten rendern. Wenn Sie nur TextView in Ihren drei Adaptern hätten, würde Ihre App schneller laufen. Es hängt wirklich davon ab, welche Elemente Sie anzeigen möchten. Denken Sie daran, dass Sie versuchen, die größtmögliche Anzahl an Geräten zu erreichen. Wenn Ihre App auf einem neuen Telefon langsam läuft, wird sie auf einem älteren Telefon garantiert langsamer ausgeführt. – Razor

+0

Danke für den Kommentar. Ich zeige Bilder, nicht groß, aber es wird wegen seiner Menge zusammenfassen. Danke für Ihre Ratschläge und Ihre Zeit – Pawel

Verwandte Themen