実現したいこと
kotlin初心者です。GitHubで公開されているリポジトリを検索するアプリを作成しています。recyclerView.adapterを使い、RepoAdapter(repos)でreposを引数として渡したいのですがRepoAdapter側の記述の仕方が分かりません。ご教授いただけると幸いです。
発生している問題・分からないこと
引数にToo many arguments for public constructor RepoAdapter() defined in com.example.yourprojectname.RepoAdapterと表示されてしまう
エラーメッセージ
error
1Too many arguments for public constructor RepoAdapter() defined in com.example.yourprojectname.RepoAdapter
該当のソースコード
MainActivity
1import android.content.Intent 2import android.os.Bundle 3import android.widget.Button 4import android.widget.EditText 5import android.widget.Toast 6import androidx.appcompat.app.AppCompatActivity 7import androidx.recyclerview.widget.LinearLayoutManager 8import androidx.recyclerview.widget.RecyclerView 9import com.example.github.GitHubService 10import com.example.github.R 11import com.example.github.RepoSearchResponse 12import com.example.yourprojectname.RepoAdapter 13import retrofit2.Call 14import retrofit2.Callback 15import retrofit2.Response 16import retrofit2.Retrofit 17import retrofit2.converter.gson.GsonConverterFactory 18 19class MainActivity : AppCompatActivity() { 20 val searchButton: Button = findViewById(R.id.search_button) 21 val searchEditText: EditText = findViewById(R.id.search_edit_text) 22 val recyclerView: RecyclerView = findViewById(R.id.recycler_view) 23 private val retrofit = Retrofit.Builder() 24 .baseUrl("https://api.github.com/") 25 .addConverterFactory(GsonConverterFactory.create()) 26 .build() 27 28 29 private val service = retrofit.create(GitHubService::class.java) 30 31 override fun onCreate(savedInstanceState: Bundle?) { 32 super.onCreate(savedInstanceState) 33 setContentView(R.layout.activity_main) 34 35 36 37 38 searchButton.setOnClickListener { 39 val query = searchEditText.text.toString() 40 service.searchRepositories(query).enqueue(object : Callback<RepoSearchResponse> { 41 override fun onResponse(call: Call<RepoSearchResponse>, response: Response<RepoSearchResponse>) { 42 val repos = response.body()?.items.orEmpty() 43 recyclerView.adapter = RepoAdapter(repos) { repos -> 44 val intent = Intent(this@MainActivity, DetailActivity::class.java) 45 intent.putExtra("url", repos) 46 startActivity(intent) 47 } 48 49 recyclerView.layoutManager = LinearLayoutManager(this@MainActivity) 50 } 51 52 override fun onFailure(call: Call<RepoSearchResponse>, t: Throwable) { 53 Toast.makeText(this@MainActivity, "Error: ${t.message}", Toast.LENGTH_SHORT).show() 54 } 55 }) 56 } 57 } 58} 59 60class DetailActivity : AppCompatActivity() { 61 override fun onCreate(savedInstanceState: Bundle?) { 62 super.onCreate(savedInstanceState) 63 setContentView(R.layout.activity_detail) 64 65 val url = intent.getStringExtra("url") 66 webView.loadUrl(url) 67 } 68}
RepoAdapter
1package com.example.yourprojectname 2 3import android.view.LayoutInflater 4import android.view.View 5import android.view.ViewGroup 6import android.widget.TextView 7import androidx.paging.PagingDataAdapter 8import androidx.recyclerview.widget.DiffUtil 9import androidx.recyclerview.widget.RecyclerView 10import com.example.github.R 11 12class RepoAdapter(private val repos: List<Repo>) : PagingDataAdapter<Repo, RepoAdapter.RepoViewHolder>(DIFF_CALLBACK) { 13 14 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RepoViewHolder { 15 val view = LayoutInflater.from(parent.context).inflate(R.layout.repo_item, parent, false) 16 return RepoViewHolder(view) 17 } 18 19 override fun onBindViewHolder(holder: RepoViewHolder, position: Int) { 20 val repo = getItem(position) 21 if (repo != null) { 22 holder.nameTextView.text = repo.name 23 holder.descriptionTextView.text = repo.description 24 } 25 } 26 27 class RepoViewHolder(view: View) : RecyclerView.ViewHolder(view) { 28 val nameTextView: TextView = view.findViewById(R.id.repo_name) 29 val descriptionTextView: TextView = view.findViewById(R.id.repo_description) 30 } 31 32 companion object { 33 val DIFF_CALLBACK = object : DiffUtil.ItemCallback<Repo>() { 34 override fun areItemsTheSame(oldItem: Repo, newItem: Repo): Boolean { 35 return oldItem.id == newItem.id 36 } 37 38 override fun areContentsTheSame(oldItem: Repo, newItem: Repo): Boolean { 39 return oldItem == newItem 40 } 41 } 42 } 43}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
コンストラクタに受け取る引数を設定していないことが原因だとわかりましたが記述する内容が分かりませんでした。
補足
特になし
回答1件
あなたの回答
tips
プレビュー