将listView项目从片段添加到另一个片段单击图标时

时间:2019-09-30 13:01:43

标签: android-fragments android-listview bundle android-arrayadapter custom-arrayadapter

我正在开发一个显示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);
}

}

任何人都可以帮助我解决这个问题?

0 个答案:

没有答案