我使用片段在回收站视图中显示车辆列表。 每当用户点击Vehicle时,它会在另一个片段中显示其详细信息, 但是当我按下后退按钮获取其详细信息后我回到车辆列表片段时,车辆列表片段像第一次一样加载。 我在循环器视图中使用了更多的负载。 这就是为什么每当用户滚动得更多并且如果他想要查看车辆的详细信息然后再回到列表时它会像第一次重新加载并且用户获得第一个项目...
车辆列表片段中的rvVehicleList.addOnScrollListener(new EndlessRecyclerViewScrollListener((LinearLayoutManager) rvVehicleList.getLayoutManager()) {
@Override
public void onLoadMore(int page, int totalItemsCount) {
if (!vehicleSearchResponseModel.getData().get_links().getNext().equals("")) {
pageNo++;
searchMoreVehicle(pageNo);
}
}
});
holder.llMainView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentManager fragmentManager = ((FragmentActivity) context).getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Bundle bundle = new Bundle();
bundle.putSerializable("vehicleInfo", vehicleSearchPagerList.get(position));
VehicleAdInfoFragment vehicleAdInfoFragment = new VehicleAdInfoFragment();
vehicleAdInfoFragment.setArguments(bundle);
fragmentTransaction.replace(R.id.frContainer, vehicleAdInfoFragment);
fragmentTransaction.addToBackStack(vehicleAdInfoFragment.getTag());
fragmentTransaction.commit();
}
});
答案 0 :(得分:0)
您可以在车辆列表片段中尝试这样的事情:
@Override
public void onPause(){
super.onPause();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
SharedPreferences.Editor editor = preferences.edit();
mCurrentIndex = ((LinearLayoutManager) rvVehicleList.getLayoutManager()).findFirstVisibleItemPosition();
editor.putInt("current_position", mCurrentIndex);
editor.apply();
}
@Override
public void onResume(){
super.onResume();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
mCurrentIndex = preferences.getInt("current_position", 0);
rvVehicleList.getLayoutManager().scrollToPosition(mCurrentIndex);
}
答案 1 :(得分:0)
限制片段的重新创建,我做了什么:
在onCreateView
中,您可以将膨胀的视图存储在全局变量中,只有在null
时才对其进行初始化,如下所示:
var root:View?=null
var apiDataReceived=false
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
if (root==null)
root=inflater!!.inflate(R.layout.fragment_layout, container, false)
return root
}
现在,如果您正在解析某些数据并将其填入RecyclerView
或任何其他View
制作一个全局变量,如上面的代码apiDataReceived
如果您成功解析数据,请将其设置为true。
在apiCalls之前设置这样的条件:
if(!apiDataReceived){ APICALLS() }
因此,只有在未解析数据时才会调用apiCalls()。
你是onCreateView
之后调用的方法中的http调用和解析或其他任何事情吗onStart
以上代码在kotlin中,如果您遇到任何问题,请在评论中告诉我。
答案 2 :(得分:0)
一种解决方案是您不需要替换片段,而使用add()方法。 对于我来说,这是唯一避免重新加载先前片段的方法。
fun addFragment(fragment: Fragment)
{
val transaction = supportFragmentManager.beginTransaction()
val currentFragment = supportFragmentManager .findFragmentById(R.id.container) //get current fragment
transaction.hide(currentFragment!!) //hide current fragment
transaction.add(R.id.container, fragment) //add next fragment
transaction.addToBackStack(null)
transaction.commit()
}