我正在为学校项目开发我的第一个应用程序。我从来没有上过java课程所以我正在学习所有自己创建Android应用程序的基础知识。目前,我的应用程序与Firebase实时数据库集成,我在我的Home_Fragment中,在其中有一个带有FrameLayout的HorizontalScrollView,在FrameLayout内部我有三个ImageView。它是这样的: Click here to see it, please。我希望你能理解我的所作所为。这些ImageView包含一些存储在Firebase Realtime数据库中的图像。这是我对HorizontalScrollView的XML启动:
<HorizontalScrollView
android:id="@+id/scrlVPrincipal2"
android:layout_width="545dp"
android:layout_height="414dp"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_marginTop="32dp"
android:scrollbars="none"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtHomeDesc"
app:layout_constraintVertical_bias="0.42"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="0dp">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingRight="1000dp">
<RelativeLayout
android:layout_width="1066dp"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imgCard1"
android:layout_width="259dp"
android:layout_height="390dp"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginStart="13dp"
android:layout_weight="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.504"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.801" />
<ImageView
android:id="@+id/imgCard3"
android:layout_width="259dp"
android:layout_height="390dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="221dp"
android:layout_weight="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.504"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.801" />
<TextView
android:id="@+id/txtPaisNome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_gravity="bottom"
android:layout_marginBottom="25dp"
android:layout_marginStart="27dp"
android:text="TextView"
android:textAlignment="center"
android:textColor="@color/colorWhite"
android:textSize="25dp" />
<ImageView
android:id="@+id/imgCard2"
android:layout_width="259dp"
android:layout_height="390dp"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_gravity="right"
android:layout_marginStart="298dp"
android:layout_weight="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.504"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.801" />
</RelativeLayout>
</FrameLayout>
</HorizontalScrollView>
这是我用来从数据库中获取图像的代码(以及国家/地区的相应名称):
mDatabase = FirebaseDatabase.getInstance().getReference();
DatabaseReference countriesRef = mDatabase.child("paises");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> urlList = new ArrayList<>();
List<String> nomePaisList = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String url = ds.child("Imagem").getValue(String.class);
String nomePais = ds.child("Nome").getValue(String.class);
urlList.add(url);
nomePaisList.add(nomePais);
}
int urlCount = urlList.size();
int randomNumber = new Random().nextInt(urlCount);
List<String> randomUrlList = new ArrayList<>();
List<String> randomNomePaisList = new ArrayList<>();
for (int i=0; i<=Constants.TOTAL_PAISES; i++) {
randomUrlList.add(urlList.get(randomNumber));
randomNomePaisList.add(nomePaisList.get(randomNumber));
Picasso.with(getContext()).load(randomUrlList.get(i)).into(imgCard1); // Inserir na ImageView a imagem do respetivo país
txtPaisNome.setText(randomNomePaisList.get(i)); // Inserir na TextView o nome do respetivo país
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
countriesRef.addListenerForSingleValueEvent(valueEventListener);
尽管如此,我想问的是:
如何使这些ImageView的滚动无限?每次用户滑动时,未显示的ImageView都会获得一个新图像并且会产生ImageViews的效果吗?
答案 0 :(得分:0)
我实际上在想你要做的事情是不可能的。但是,如果您准备尝试新的内容,我建议您RecyclerView
,当到达RecyclerView
中的最后一个元素时,从数据库中检索数据,添加到RecyclerView
的数据列表中
答案 1 :(得分:0)
您可以使用循环视图而不是滚动视图来执行此操作。
水平使用循环视图并添加滚动侦听器。
然后从服务器加载图像并显示它。
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
totalItemCount = llm.getItemCount();
lastVisibleItem = llm.findLastVisibleItemPosition();
if (!isLoading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
isLoading = true;
myList.add(new myObject(TYPE_BOTTOM_LOADING));
recyclerView.post(new Runnable() {
@Override
public void run() {
mAdapter.notifyItemInserted(myList.size() - 1);
}
});
startIndex += INDEX_INTERVAL;
endIndex += INDEX_INTERVAL;
getMyList(startIndex, endIndex);
}
}});
请参考这里:) http://www.devexchanges.info/2017/02/android-recyclerview-dynamically-load.html