maker0927
170
2020-05-15 13:09:12 작성 2020-05-15 13:15:17 수정됨
2
251

안드로이드 스튜디오 Recycler view에서 목록을 클릭시 링크 이동을 어떻게 구현 하면 될까요 ㅜㅜ?


개발언어는 코틀린이고요 리사이클러 뷰에서 어떻게 하면 클릭시에 클릭한 목록의 url 정보를 얻어와서 링크로 이동하게 할 수 있을까요? 초보라서 구글링을 해봐도 잘 모르겠습니다 ㅜㅜ

구체적인 방법을 알려주시면 감사하겠습니다 ㅜㅜ


이건 어댑터 부분입니다.ㅠㅠ

package com.today_news

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.list_item.view.*

class NewsInfoAdapter(val NewsInfoList: ArrayList<NewsInfo>) :
    RecyclerView.Adapter<NewsInfoAdapter.CustomViewHolder>() {

    override fun onCreateViewHolder(
        parent: ViewGroup,
        viewType: Int
    ): NewsInfoAdapter.CustomViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.list_item, parent, false)
        return CustomViewHolder(view)
    }

    override fun getItemCount(): Int {
        return NewsInfoList.size

    }

    override fun onBindViewHolder(holder: NewsInfoAdapter.CustomViewHolder, position: Int) {
        holder.logo.setImageResource(NewsInfoList.get(position).logo)
        holder.name.text = NewsInfoList.get(position).name

    }

    class CustomViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val logo = itemView.findViewById<ImageView>(R.id.iv_logo) // 로고
        val name = itemView.findViewById<TextView>(R.id.tv_name) // 이름
    }


}


이부분은 main_activity 입니다.

package com.today_news

import android.os.Bundle
import android.view.Gravity
import android.view.MenuItem
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.GravityCompat
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.navigation.NavigationView
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        val newsInfoList = arrayListOf(
            NewsInfo(R.drawable.kbs, "KBS", "http://news.kbs.co.kr/common/main.html"),
            NewsInfo(R.drawable.sbs, "SBS 뉴스", "https://news.sbs.co.kr/news/newsMain.do"),
            NewsInfo(R.drawable.mbc, "MBC", "https://imnews.imbc.com/pc_main.html"),
            NewsInfo(R.drawable.jtbc, "JTBC", "http://news.jtbc.joins.com/"),
            NewsInfo(R.drawable.mbn, "MBN", "https://www.mbn.co.kr/news/"),
            NewsInfo(
                R.drawable.channel_a,
                "채널 A",
                "http://m.ichannela.com/news/main/news_main_mob.do"
            ),

            NewsInfo(R.drawable.tv_chosun, "TV 조선", "http://news.tvchosun.com/"),
            NewsInfo(R.drawable.yna, "연합뉴스", "https://www.yna.co.kr/"),
            NewsInfo(R.drawable.ytn, "YTN", "https://www.ytn.co.kr/"),
            NewsInfo(R.drawable.joongang, "중앙일보", "https://joongang.joins.com/"),
            NewsInfo(R.drawable.donga, "동아일보", "https://www.donga.com/"),
            NewsInfo(R.drawable.hani, "한겨례", "http://www.hani.co.kr/"),
            NewsInfo(R.drawable.khan, "경향신문", "http://www.khan.co.kr/"),
            NewsInfo(R.drawable.segye, "세계일보", "https://www.segye.com/"),
            NewsInfo(R.drawable.seoul, "서울신문", "https://www.seoul.co.kr/"),
            NewsInfo(R.drawable.sisain, "시사인", "https://www.sisain.co.kr/"),
            NewsInfo(R.drawable.tbs, "TBS", "http://tbs.seoul.kr/news/index.do")
        )

        btn_navi.setOnClickListener {
            layout_drawer.openDrawer(GravityCompat.START)
        }

        naviView.setNavigationItemSelectedListener(this) // 네비게이션 메뉴 아이템에 클릭 속성 부여

        rv_news.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
        rv_news.setHasFixedSize(true)

        rv_news.adapter = NewsInfoAdapter(newsInfoList)
    }

    override fun onNavigationItemSelected(item: MenuItem): Boolean { // 네비게이션 메뉴 아이템 클릭 시 수행
        when (item.itemId) {
            R.id.lightmode -> Toast.makeText(applicationContext, "기능 개발 중입니다", Toast.LENGTH_SHORT)
                .show()
        }
        layout_drawer.closeDrawers() // 네비게이션 뷰 닫기
        return false
    }

    override fun onBackPressed() {
        if (layout_drawer.isDrawerOpen(GravityCompat.START)) {
            layout_drawer.closeDrawers()
        } else {
            super.onBackPressed()
        }

    }
}



예시로 코드를 짜주시면 정말 감사하겠습니다 ㅜㅜ

0
  • 답변 2

  • UnknownDontknow
    554
    2020-05-15 16:42:08 작성 2020-05-15 18:02:16 수정됨

    onBindViewholder에서 아이템 클릭리스너 추가해서, 로고나 네임처럼 url에대한 getter호출해서 url값을 받아오고, 웹뷰가 포함된 새로운 액티비티 만드셔서 그 액티비티를 호출할때 intent로 위에서 받아온 url값을 전달해준뒤 웹뷰에서 띄워주거나 안드로이드 기본브라우저로 실행되도록 하면 될듯해요. 

    제가 코틀린 문법을 모르기도 하고, 이곳 커뮤니티에 코드를 짜달라고 글을 올리시면 도움이 하나도 없을거에요.. 기본 골격을 작성하신거보니 아예 모르는것은 아니신듯하니 좀더 구글링도 해보고 공부하셔서 직접짜보셔야 내것이 될거에요.

  • Bishop
    2020-05-16 00:28:35
    abstract class NewsInfoAdapter : ...{
    abstract fun clickListItem(newsInfo:NewsInfo)
    }
    구현하는 방법은 많은데 저는 간단한건 위에같이 구현해요 :)
  • 로그인을 하시면 답변 을 등록할 수 있습니다.