如何从recylerview到新片段从项目导航
有人可以帮助我弄清楚我应该如何从循环系统的项目导航到此重新碎片吗?我想使用github api将这些内容显示在repofragment中。
我想单击“回收器”视图项目中的redoname。使用OnClickListener,我希望打开一个新的片段(repofoffragment),其中包含RecyClerview的单击项目的信息。
我正在进行存储库搜索,并希望在单击存储库时显示信息。下面的代码表示我尝试做的事情。 感谢您的帮助!
这是我的repositoryRecyclerAdapter:
class RepositoryRecyclerAdapter(repos: List<RepositoriesResponse>): RecyclerView.Adapter<SearchPlaceHolder>(){
private var repoList = repos
var navc: NavController?= null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SearchPlaceHolder {
val inflatedView = LayoutInflater.from(parent.getContext()).inflate(R.layout.pravokutnik, parent, false);
return SearchPlaceHolder(inflatedView)
}
override fun onBindViewHolder(holder: SearchPlaceHolder, position: Int) {
val repo = repoList[position]
holder.bindRepo(repo)
holder.itemView.setOnClickListener(object: View.OnClickListener{
override fun onClick(v: View){
navc?.navigate(R.id.action_searchFragment_to_repoFragment)
}
})
}
override fun getItemCount() = repoList.size
}
这是我的搜索范围:
class SearchFragment : BaseFragment<SearchViewModel, FragmentSearchBinding, SearchRepository>() {
private lateinit var mContext: Context
private var reposList = ArrayList<RepositoriesResponse>().toList()
private lateinit var adapterRepo: RepositoryRecyclerAdapter
private lateinit var linearLayoutManagerDistance: LinearLayoutManager
val args: SearchFragmentArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mContext = this.requireContext()
linearLayoutManagerDistance = LinearLayoutManager(mContext)
linearLayoutManagerDistance.orientation = LinearLayoutManager.VERTICAL
binding.repositoriesList.layoutManager = linearLayoutManagerDistance
val query = args.query
val apiInterface = RepositoryApi.create().getRepositoriesByQuery(query)
apiInterface.enqueue( object : Callback<QueryResponse> {
override fun onResponse(call: Call<QueryResponse>?, response: Response<QueryResponse>?) {
if(response?.body() != null){
reposList = response.body()!!.items
adapterRepo = RepositoryRecyclerAdapter(reposList)
binding.repositoriesList.adapter = adapterRepo
}
}
override fun onFailure(call: Call<QueryResponse>?, t: Throwable?) {
Toast.makeText(mContext, t.toString(), Toast.LENGTH_LONG).show()
}
})
}
override fun getViewModel() = SearchViewModel::class.java
override fun getFragmentBinding(
inflater: LayoutInflater,
container: ViewGroup?
) = FragmentSearchBinding.inflate(inflater, container, false)
override fun getFragmentRepository()=
SearchRepository()
}
homefragment:
class HomeFragment : BaseFragment<HomeViewModel, FragmentHomeBinding, SearchRepository>() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_home, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
var mySearchView = view.findViewById<SearchView>(R.id.search_view)
var navc = Navigation.findNavController(view)
mySearchView.setIconifiedByDefault(true);
mySearchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
val action = HomeFragmentDirections.actionHomeFragmentToSearchFragment2(query)
navc?.navigate(action)
return false
}
override fun onQueryTextChange(newText: String?): Boolean {
return false
}
})
}
override fun getViewModel() = HomeViewModel::class.java
override fun getFragmentBinding(
inflater: LayoutInflater,
container: ViewGroup?
) = FragmentHomeBinding.inflate(inflater, container, false)
override fun getFragmentRepository()=
SearchRepository()
}
repoffragment:
class RepoFragment : BaseFragment<RepoViewModel, FragmentRepoBinding, SearchRepository>(){
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_repo, container, false)
}
override fun getViewModel() = RepoViewModel::class.java
override fun getFragmentBinding(
inflater: LayoutInflater,
container: ViewGroup?
) = FragmentRepoBinding.inflate(inflater, container, false)
override fun getFragmentRepository() = SearchRepository()
}
另外,我在尝试运行此代码时会遇到错误; AndroidStudio说,我在夸大折线的布局时犯了一个错误。
Can someone help me figure out how i am supposed to navigate from an item in recyclerview to this repoFragment? I want to display these things in repoFragment using the GitHub API.
I want to click the reponame in the item of the recycler view. With the onClickListener i wish to open a new fragment (RepoFragment) with the info of the clicked item from the recyclerview.
I'm doing a repository search and want to display the info when clicking on the repository.The code below represents what i tried to do.
Thank you for your help!
This is my RepositoryRecyclerAdapter:
class RepositoryRecyclerAdapter(repos: List<RepositoriesResponse>): RecyclerView.Adapter<SearchPlaceHolder>(){
private var repoList = repos
var navc: NavController?= null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SearchPlaceHolder {
val inflatedView = LayoutInflater.from(parent.getContext()).inflate(R.layout.pravokutnik, parent, false);
return SearchPlaceHolder(inflatedView)
}
override fun onBindViewHolder(holder: SearchPlaceHolder, position: Int) {
val repo = repoList[position]
holder.bindRepo(repo)
holder.itemView.setOnClickListener(object: View.OnClickListener{
override fun onClick(v: View){
navc?.navigate(R.id.action_searchFragment_to_repoFragment)
}
})
}
override fun getItemCount() = repoList.size
}
This is my SearchFragment:
class SearchFragment : BaseFragment<SearchViewModel, FragmentSearchBinding, SearchRepository>() {
private lateinit var mContext: Context
private var reposList = ArrayList<RepositoriesResponse>().toList()
private lateinit var adapterRepo: RepositoryRecyclerAdapter
private lateinit var linearLayoutManagerDistance: LinearLayoutManager
val args: SearchFragmentArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mContext = this.requireContext()
linearLayoutManagerDistance = LinearLayoutManager(mContext)
linearLayoutManagerDistance.orientation = LinearLayoutManager.VERTICAL
binding.repositoriesList.layoutManager = linearLayoutManagerDistance
val query = args.query
val apiInterface = RepositoryApi.create().getRepositoriesByQuery(query)
apiInterface.enqueue( object : Callback<QueryResponse> {
override fun onResponse(call: Call<QueryResponse>?, response: Response<QueryResponse>?) {
if(response?.body() != null){
reposList = response.body()!!.items
adapterRepo = RepositoryRecyclerAdapter(reposList)
binding.repositoriesList.adapter = adapterRepo
}
}
override fun onFailure(call: Call<QueryResponse>?, t: Throwable?) {
Toast.makeText(mContext, t.toString(), Toast.LENGTH_LONG).show()
}
})
}
override fun getViewModel() = SearchViewModel::class.java
override fun getFragmentBinding(
inflater: LayoutInflater,
container: ViewGroup?
) = FragmentSearchBinding.inflate(inflater, container, false)
override fun getFragmentRepository()=
SearchRepository()
}
The HomeFragment:
class HomeFragment : BaseFragment<HomeViewModel, FragmentHomeBinding, SearchRepository>() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_home, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
var mySearchView = view.findViewById<SearchView>(R.id.search_view)
var navc = Navigation.findNavController(view)
mySearchView.setIconifiedByDefault(true);
mySearchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
val action = HomeFragmentDirections.actionHomeFragmentToSearchFragment2(query)
navc?.navigate(action)
return false
}
override fun onQueryTextChange(newText: String?): Boolean {
return false
}
})
}
override fun getViewModel() = HomeViewModel::class.java
override fun getFragmentBinding(
inflater: LayoutInflater,
container: ViewGroup?
) = FragmentHomeBinding.inflate(inflater, container, false)
override fun getFragmentRepository()=
SearchRepository()
}
RepoFragment:
class RepoFragment : BaseFragment<RepoViewModel, FragmentRepoBinding, SearchRepository>(){
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_repo, container, false)
}
override fun getViewModel() = RepoViewModel::class.java
override fun getFragmentBinding(
inflater: LayoutInflater,
container: ViewGroup?
) = FragmentRepoBinding.inflate(inflater, container, false)
override fun getFragmentRepository() = SearchRepository()
}
Also, I get an error when trying to run this code; androidstudio says that i made a mistake when inflating the layout of repofragment.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论