我正在开发一个显示Google API图书列表的应用程序,当用户单击列表视图中的项目片段时,我想将此项目添加到另一个显示收藏书籍的片段(收藏夹片段)中的列表视图中。 我已经在网上搜索过,但是我什么也没找到,我也在StackOverFlow中搜索了类似的问题,但是我找不到适合我的情况的正确答案。 但是,我听说过用于在活动和片段之间传递数据的包,所以我尝试在代码中使用它,但是由于myArrayList项不是字符串,我无法实现我想要的功能,这是我的代码显示书籍的片段:
public class DisplayBookListFragment extends Fragment {
private BookAdapter bookAdapter;
private List<Book> favouriteArrayList;
public DisplayBookListFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.activity_display_book_list,container, false);
final ListView listView = v.findViewById(R.id.list);
bookAdapter = new BookAdapter(getActivity(), new ArrayList<Book>());
listView.setAdapter(bookAdapter);
favouriteArrayList = new ArrayList<>();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Book b = bookAdapter.getItem(i);
favouriteArrayList.add(b);
//This my fragment that i need adding clicked items to
FavouritesFragment favouritesFragment = new FavouritesFragment();
Bundle bundle = new Bundle();
bundle.putStringArrayList("List 1", favouriteArrayList);
favouritesFragment.setArguments(bundle);
}
});
return v;
}
}
这是我的布局:
<RelativeLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<ListView
android:layout_width="match_parent"
android:id="@+id/list"
android:layout_height="match_parent"
android:divider="@null"
android:dividerHeight="0dp"
android:drawSelectorOnTop="true"/>
</RelativeLayout>
和我的适配器:
public class BookAdapter extends ArrayAdapter<Book> {
public BookAdapter(Context context,List<Book> bookList){
super(context,0,bookList);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View listViewItem = convertView;
if (listViewItem == null){
listViewItem = LayoutInflater.from(getContext()).inflate(R.layout.list_item,parent,false);
}
Book b = getItem(position);
TextView publishOfDate = listViewItem.findViewById(R.id.publish_date);
publishOfDate.setText(b.getPublishDate());
TextView bookName = listViewItem.findViewById(R.id.name_of_book);
bookName.setText(b.getBookName());
TextView author = listViewItem.findViewById(R.id.author);
author.setText(b.getAuthor());
TextView language = listViewItem.findViewById(R.id.language);
language.setText(b.getLang());
TextView rating = listViewItem.findViewById(R.id.rating);
rating.setText(formatDecimalToString(b.getRating()));
return listViewItem;
}
private String formatDecimalToString(Double v){
DecimalFormat decimalFormat = new DecimalFormat("0.0");
return decimalFormat.format(v);
}
}
任何人都可以帮助我解决这个问题?