
在Android应用开发中,有时会遇到添加了多个FloatingActionButton (FAB),但其中一个或多个无法正常工作,导致应用崩溃的问题。本文将针对这一问题,提供详细的分析和解决方案。问题的核心通常在于Intent上下文的使用不当。
当你在FoodActivity中使用getApplicationContext()作为Intent的上下文时,可能会导致问题。getApplicationContext()返回的是整个应用程序的上下文,而启动Activity需要的是当前Activity的上下文。
以下是修改后的代码,将getApplicationContext()替换为this,即当前FoodActivity的实例:
public class FoodActivity extends AppCompatActivity {
FloatingActionButton mCreateRem;
RecyclerView mRecyclerview;
ArrayList<Model> dataholder = new ArrayList<Model>();
myAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_food);
mRecyclerview = (RecyclerView) findViewById(R.id.recyclerView_food);
mRecyclerview.setLayoutManager(new LinearLayoutManager(this)); // 使用 this
mCreateRem = (FloatingActionButton) findViewById(R.id.create_reminder);
mCreateRem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(FoodActivity.this, FoodAddReminder.class); // 使用 FoodActivity.this 或者 this
startActivity(intent);
}
});
Cursor cursor = new dbManager(this).readallreminders(); // 使用 this
while (cursor.moveToNext()) {
Model model = new Model (cursor.getString(1), cursor.getString(2), cursor.getString(3));
dataholder.add(model);
}
adapter = new myAdapter(dataholder);
mRecyclerview.setAdapter(adapter);
}
@Override
public void onBackPressed() {
finish();
super.onBackPressed();
}
}解释:
注意事项:
总结:
当遇到FloatingActionButton点击事件无法正常工作,并导致应用崩溃的问题时,首先检查Intent的上下文是否正确。通常情况下,将getApplicationContext()替换为this或YourActivityName.this可以解决问题。同时,确保在其他需要上下文的地方,如RecyclerView的LayoutManager和数据库操作中,也使用了正确的上下文。
以上就是解决Android中第二个FloatingActionButton失效的问题的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号