【问题标题】:Is it possible to use a recyclerView inside a form?是否可以在表单中使用 recyclerView?
【发布时间】:2022-11-27 15:30:54
【问题描述】:

我正在开发一个应用程序来存储电视节目信息。用户可以添加节目,然后查看其收藏。我希望在添加节目时也能够添加季节,如果需要的话还可以添加几个。

我有 ShowSeason 模型,我创建了一个 AddShowActivity 和它的 add_show_activity 布局。我不久前开始使用 Android Studio,所以也许这不是最佳选择,但我想在我的布局中使用 RecyclerView,然后回收 item_add_season 布局,以便添加尽可能多的季节创建一个节目。

然而,这给我带来了几个问题,我找不到任何答案,目前不知道该怎么做。我在我的add_show_activity 中放置了一个Add Season 按钮,它应该向我的 RecyclerView 添加一个新的item_add_season,但是我不知道我应该怎么做。即使我还没有尝试过,我也想知道如何从我的适配器外部检索我的数据。

所以我一直想知道是否可以使用这样的 RecyclerView 来向我的表单添加几个季节?如果没有,我应该怎么做呢?

下面是我的AddShowActivity 和我的AddSeasonAdapter(recyclerview 适配器)。

class AddShowActivity : AppCompatActivity() {
    private lateinit var editTextName: EditText
    private lateinit var editTextNote: EditText
    private lateinit var confirmButton: Button
    private lateinit var addSeasonButton: Button
    private lateinit var seasonsRecyclerView: RecyclerView

    @SuppressLint("NewApi")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_add_show)
        
        editTextName = findViewById(R.id.name_input)
        editTextNote = findViewById(R.id.note_input)

        seasonsRecyclerView = findViewById(R.id.seasons_recycler_view)
        seasonsRecyclerView.adapter = AddSeasonAdapter(this, 0, R.layout.item_add_season)
        seasonsRecyclerView.layoutManager = LinearLayoutManager(this)

        confirmButton = findViewById(R.id.confirm_button)
        confirmButton.setOnClickListener{
            sendForm()
        }

        addSeasonButton = findViewById(R.id.add_season_button)
        addSeasonButton.setOnClickListener {
            // Add a season to the RecyclerView and update its seasonsCount
        }
    }

    @SuppressLint("NewApi")
    private fun sendForm(){
        val repo = ShowRepository()
        val showName = editTextName.text.toString()
        val showNote = parseInt(editTextNote.text.toString())

        val seasonsList = arrayListOf<SeasonModel>() // Get info from seasons adapter and create seasons list

        val show = ShowModel(UUID.randomUUID().toString(), showName, showNote, seasonsList)
        repo.insertShow(show)
        this.finish()
    }
}
class AddSeasonAdapter(val context: AddShowActivity, private var seasonsCount: Int, private val layoutId: Int) : RecyclerView.Adapter<AddSeasonAdapter.ViewHolder>() {

    class ViewHolder(view: View) : RecyclerView.ViewHolder(view){

    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(layoutId, parent, false)
        return ViewHolder(view)
    }

    @SuppressLint("NewApi")
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        
    }

    override fun getItemCount(): Int = seasonsCount
}

【问题讨论】:

    标签: android forms android-recyclerview


    【解决方案1】:

    我找到了一个 YouTube 视频,详细解释了如何操作(this one 对于那些想看的人)。

    所以基本上,解决方案不是使用 RecyclerView,而是使用 LinearLayout,在单击“添加季节”按钮时添加季节。这很容易做到,因为唯一要做的就是膨胀布局,这里是我的item_add_season,然后将它添加到LinearLayout

    就这样:

    // The LinearLayout in which items are added
    val seasonsList = findViewById<LinearLayout>(R.id.seasons_list)
    
    addSeasonButton.setOnClickListener {
            val seasonView: View = layoutInflater.inflate(R.layout.item_add_season, null, false)   
    
            // Initialize the seasons items components
            val seasonNumber = seasonView.findViewById<EditText>(R.id.season_number_input)
            val seasonNote = seasonView.findViewById<EditText>(R.id.season_note_input)
            val imageClose = seasonView.findViewById<ImageView>(R.id.image_close)
    
    
            imageClose.setOnClickListener {
                seasonsList.removeView(seasonView)
            }
    
            // Add the add_season_layout to the linearLayout
            seasonsList.addView(seasonView)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-16
      • 2012-05-03
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多