问题描述
我目前正在实现一个目前似乎无法正常运行的食物日记,当用户点击一个项目时打开 RecyclerView,Toast 消息会正确显示,他们导航回片段页面。 但是我想将他们点击的数据传递给上一个片段,并使用他们选择的项目适当地设置一个 TextView,请参阅下面的代码:
public class InputFoodToDiary extends AppCompatActivity {
RecyclerView recyclerView;
UserDatabase userDatabase;
ArrayList<String> FoodID,FoodName,Calories;
CustomAdapter customAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_inputfoodtodiary);
recyclerView = findViewById(R.id.recyclerView_InputFood);
userDatabase = new UserDatabase(InputFoodToDiary.this,"CALTOR",null,1);
FoodID = new ArrayList<>();
FoodName = new ArrayList<>();
Calories = new ArrayList<>();
storeDataInArrays();
customAdapter = new CustomAdapter(InputFoodToDiary.this,FoodID,Calories,new CustomAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view,int position) {
Toast.makeText(getApplicationContext(),Calories.get(position),Toast.LENGTH_SHORT).show();
onBackpressed();
}
});
recyclerView.setAdapter(customAdapter);
recyclerView.setLayoutManager(new linearlayoutmanager(InputFoodToDiary.this));
}
void storeDataInArrays(){
Cursor cursor = userDatabase.readAllData();
if(cursor.getCount() == 0){
Toast.makeText(this,"No Data.",Toast.LENGTH_SHORT).show();
} else {
while (cursor.movetoNext()){
FoodID.add(cursor.getString(0));
FoodName.add(cursor.getString(1));
Calories.add(cursor.getString(2));
}
}
}
public void onBackpressed(){
super.onBackpressed();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.food_search,menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView)searchItem.getActionView();
searchView.setImeOptions(EditorInfo.IME_ACTION_DONE);
searchView.setonQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
customAdapter.getFilter().filter(newText);
return false;
}
});
return true;
}
}
解决方法
据我所知,您不使用片段,而是使用活动。当从活动中调用 back press 时,它会自行关闭。解决方案是在您的活动下的片段中使用回收器视图,当您单击回收器视图中的项目时,将数据保存在父活动的成员中,而不是当片段消失时,数据将保存在家长活动,你可以用它做任何你想做的事情。