![](/img/trans.png)
[英]Android - setArguments to fragment in FragmentPagerAdapter
[英]setArguments() not working while passing data to Fragment
我是 Android 开发的新手,我正在尝试实现音乐播放器。 我试图实现一个片段,如果用户点击“删除”,则所选索引将从 ArrayList 中删除并从 RecyclerView 中消失。
当应用程序到达 onClick 匿名函数时,它在“位置”变量的分配处崩溃,指示“空指针异常”。
我将 MainActivity.java 和 DeleteFragment.java 附加到这个线程。 谢谢!
public class MainActivity extends AppCompatActivity {
static ArrayList<SongModel> songModelArrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView songsRV = findViewById(R.id.activity_main_recycler);
songsRV.setHasFixedSize(true);
songsRV.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
songModelArrayList = new ArrayList<SongModel>();
songModelArrayList.add(new SongModel("Bob Dylan", "One More Cup Of Coffee", "https://www.syntax.org.il/xtra/bob.m4a", R.drawable.bob1));
songModelArrayList.add(new SongModel("Bob Dylan", "Sara", "https://www.syntax.org.il/xtra/bob1.m4a", R.drawable.bob2));
songModelArrayList.add(new SongModel("Bob Dylan", "The Man In Me", "https://www.syntax.org.il/xtra/bob2.mp3", R.drawable.bob3));
SongAdapter songAdapter = new SongAdapter(this, songModelArrayList);
ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP|ItemTouchHelper.DOWN, ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
if(direction == ItemTouchHelper.RIGHT || direction == ItemTouchHelper.LEFT){
DeleteFragment deleteFragment = new DeleteFragment();
Bundle args = new Bundle();
args.putParcelableArrayList("arrayList", songModelArrayList);
int position = viewHolder.getAdapterPosition();
args.putInt("position", position);
deleteFragment.setArguments(args);
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.enter_from_right, 0, 0, R.anim.exit_from_left).add(R.id.fragment_container, new DeleteFragment(), null).addToBackStack("Delete").commit();
}
}
};
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
itemTouchHelper.attachToRecyclerView(songsRV);
songsRV.setAdapter(songAdapter);
}
}
public class DeleteFragment extends Fragment {
public DeleteFragment() {
// Required empty public constructor
}
public static DeleteFragment newInstance(ArrayList<SongModel> songs){
DeleteFragment deleteFragment = new DeleteFragment();
Bundle args = new Bundle();
args.putParcelableArrayList("arrayList", songs);
deleteFragment.setArguments(args);
return deleteFragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_delete, container, false);
FloatingActionButton floatingActionButton = view.findViewById(R.id.exit_btn);
floatingActionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(requireActivity().getSupportFragmentManager().getBackStackEntryCount() > 0)
requireActivity().getSupportFragmentManager().popBackStack();
}
});
MaterialButton cancelBtn = view.findViewById(R.id.cancel_btn);
cancelBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(requireActivity().getSupportFragmentManager().getBackStackEntryCount() > 0)
requireActivity().getSupportFragmentManager().popBackStack();
}
});
MaterialButton deleteBtn = view.findViewById(R.id.delete_btn);
deleteBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle args = getArguments();
int position = args.getInt("position");
ArrayList<SongModel> changedSongArrayList = getArguments().getParcelableArrayList("arrayList");
changedSongArrayList.remove(position);
changedSongArrayList.notifyAll();
if(requireActivity().getSupportFragmentManager().getBackStackEntryCount() > 0)
requireActivity().getSupportFragmentManager().popBackStack();
}
});
return view;
}
}
在线getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.enter_from_right, 0, 0, R.anim.exit_from_left).add(R.id.fragment_container, new DeleteFragment(), null).addToBackStack("Delete").commit();
您正在创建新的Deletefragment
而不是使用已创建的带参数的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.