我是 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;
}
}
uj5u.com熱心網友回復:
在行中,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而不是使用已創建的帶引數的
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/334110.html
標籤:爪哇 安卓 安卓工作室 android-fragments 空指针异常
上一篇:反應原生中未知的隨機記憶體崩潰
