问题描述
我正在尝试构建一个单词对单词的RTL语言电子书应用程序。电子书的数据存储在Sqlite数据库中。经过大量搜索之后,我发现Flexbox布局适合我的需求,以便以所需的格式显示数据。以下链接为我提供了帮助:Android GridLayout with dynamic number of columns per row但是,问题在于,如果在视图中传递的数据很大,那么将显示部分数据。如果传递的数据很小,那么我根本就没有问题。
这是适配器代码:
public class VerseAdapter extends RecyclerView.Adapter<VerseAdapter.ViewHolder> {
private List<verseItem> items;
private Context context;
wordsAdapter sAdapter;
GridLayoutManager layoutManager;
public VerseAdapter(List<verseItem> items,Context context) {
this.items = items;
this.context = context;
}
// This method is used to attach
// custom layout to the recycler view
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
View vw = LayoutInflater.from(parent.getContext()).inflate(R.layout.verse_row,parent,false);
return new ViewHolder(vw);
}
// This method is used to set the action
// to the widgets of our custom layout.
@Override
public void onBindViewHolder(@NonNull ViewHolder holder,int position) {
verseItem item = items.get(position);
ArrayList<wordsModel> models = new ArrayList<>(item.getWordsModelList());
String ayahnum = "" + item.getAyah();
holder.ayah.setText(ayahnum);
holder.verses_telugu.setText(item.getVerses_telugu());
// FlexboxLayoutManager code:
FlexboxLayoutManager layoutManager = new FlexboxLayoutManager(context);
layoutManager.setFlexDirection(FlexDirection.ROW_REVERSE);
layoutManager.setJustifyContent(JustifyContent.FLEX_START);
ViewHolder.wordsrecyclerView.setLayoutManager(layoutManager);
sAdapter = new wordsAdapter(models);
ViewHolder.wordsrecyclerView.setAdapter(sAdapter);
sAdapter.notifyItemChanged(position);
holder.setIsRecyclable(false);
}
@Override
public int getItemCount() {
return items.size();
}
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView ayah;
TextView verses_telugu;
public static RecyclerView wordsrecyclerView;
public ViewHolder(View itemView) {
super(itemView);
ayah = itemView.findViewById(R.id.ayah);
verses_telugu = itemView.findViewById(R.id.telugu_line);
wordsrecyclerView = itemView.findViewById(R.id.words_RV_id);
}
}
}
这是我的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/ayah"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_margin="5dp"
android:textAlignment="viewStart"
android:textColor="#27A82C"
android:textSize="18sp"
android:textStyle="bold" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/words_RV_id"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/telugu_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_margin="5dp"
android:textAlignment="textStart"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
这是最终结果显示的实际样子:
这是我的应用程序的样子:
现在,如果您从屏幕截图中注意到,我尝试显示的数据是相同的。但是在我的应用中,并非所有的单词都显示出来,就像您注意到的那样。
我注意到的另一件事是,如果屏幕方向是垂直的,则我可以看到的最大线条为10,如果屏幕方向是垂直的,则我可以看到最多为6的线条。这些行数对于数据很大的所有位置都是固定的。如果数据较小,它将以所需的确切行数显示,并且如前所述,我一点都没有问题。
希望有人能尽快帮助我。提前致谢。 (:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)