마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 customListView item 클릭시 인터넷링크 질문입니다.

0 추천
public class MainActivity extends AppCompatActivity {

    ListView listView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        Button woman = (Button) findViewById(R.id.woman);
        woman.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, WomanActivity.class);
                startActivity(intent);
            }
        });
        Button couple = (Button) findViewById(R.id.couple);
        couple.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, CoupleActivity.class);
                startActivity(intent);
            }
        });

        ArrayList<MainDTO> list = new ArrayList<MainDTO>();
        list.add( new MainDTO("1", "조군샵", "최신트렌드 코디팁으로 시선강탈! 조군샵으로 더 멋지고 당당하게! 신규상품 5%할인", R.drawable.jogun));
        list.add( new MainDTO("2", "훈스", "SNS 남자쇼핑몰 좋아요 1000만, 남자쇼핑몰, 여자들이 직접뽑은 코디", R.drawable.huns));
        list.add( new MainDTO("3", "머시따", "시즌별 완벽 코디제안", R.drawable.musidda));
        list.add( new MainDTO("4", "미스터스트릿", "시즌별 BEST 아이템 가성비 甲", R.drawable.street));
        list.add( new MainDTO("5", "비시크", "당일배송, 댄디/캐쥬얼함", R.drawable.bechic));
listView = (ListView)findViewById(R.id.listview);
        MainCustomAdapter adapter =
                new MainCustomAdapter (
                        getApplicationContext(),
                        R.layout.man,list);
        listView.setAdapter(adapter);
    }
}
public class MainDTO {
    String num;
    String title;
    String content;
    int imgIcon;

    public MainDTO(String num, String title, String content, int imgIcon) {
        this.num = num;
        this.title = title;
        this.content = content;
        this.imgIcon = imgIcon;
    }
    public String getNum() {
        return num;
    }
    public void setNum(String num) {
        this.num = num;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public int getImgIcon() {
        return imgIcon;
    }
    public void setImgIcon(int imgIcon) {
        this.imgIcon = imgIcon;
    }
}
public class MainCustomAdapter extends BaseAdapter {
    Context ctx;
    int layout;
    ArrayList<MainDTO> list;
    LayoutInflater inf;

    public MainCustomAdapter(Context ctx, int layout, ArrayList<MainDTO> list){
        this.ctx = ctx;
        this.layout = layout;
        this.list = list;

        inf = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView == null){
            convertView = inf.inflate(layout, null);
        }
        TextView txtNum = (TextView)convertView.findViewById(R.id.num1);
        TextView txtTitle = (TextView)convertView.findViewById(R.id.tv_jogun1);
        TextView txtContent = (TextView)convertView.findViewById(R.id.tv_jogun2);
        ImageView imgIcon = (ImageView)convertView.findViewById(R.id.iv_img);

        MainDTO dto = list.get(position);
        txtNum.setText(dto.getNum());
        txtTitle.setText(dto.getTitle());
        txtContent.setText(dto.getContent());
        imgIcon.setImageResource(dto.getImgIcon());

        return convertView;
    }

}
아이템마다 링크걸어야하는데 막혀서 질문드립니다..ㅠㅠ
dlsrb46 (180 포인트) 님이 2017년 10월 11일 질문
getView에서 convertView에 온클릭리스너 넣어도 되고 원하는 view에 온클릭리스너 넣어서 링크창 띄워도 될 것 같은데요.



리스너 안에 intent 를 이용해서 웹뷰 띄어도 되고 웹뷰를 직접 커스텀하셔서 dialog라든지 activity라든지 만들어줘도  될 것 같네요.
자세히설명해주시면안될까요 ㅠㅠㅠ 초보라 잘모르겟어요...
1. MainDTO  class 안에 String url을 집어넣는다.

2. getView안에 convertView.setOnClickLinstener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                     ctx.startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(dto.url));


            }
        });

를 추가한다.

3. dto 는 final로 선언한다.

이렇게 하심 되겟네요.
글면 url주소는 어디다가입력해야해요??
dto final 선언하고나서 실행해서 클릭햇는데 중지되었다구뜨네요..

1개의 답변

+1 추천
 
채택된 답변
각각의 아이템터치 시 각각다른 인터넷 링크를 주고싶다면 list.add하는 각각의 아이템마다 링크를 넣어주어야 합니다.

 

그렇다면  MainDTO 클래스에 링크를 저장할 String 항목을 하나 더 추가해야 할것이고요

 

그후 아답터에 가셔서  getView 메서드 안에 converview에 온클릭 리스너 달아주셔서 아이템에 각각 추가해놓은 링크로 연결되도록 하시면 될것같네요
시공조아 (1,650 포인트) 님이 2017년 10월 12일 답변
dlsrb46님이 2017년 10월 12일 채택됨
오 감사합니다 혹시 예시사항 있으신가요 ㅠㅠㅠㅠ
Main DTO 클래스에다가 홈페이지주소를 저장해야하나요?
네 각각 다른 주소를 저장하고 있어야하니까 홈페이지 주소를 DTO class에 넣고

생성자와 getter setter메서드를 생성한뒤

온클릭 리스너 안에서 dto.get~메서드로 링크가져와서 걸어주시면 되겠네요
DTO class안에 url getter setter 메서드 생성한뒤에 홈페이지 주소를 어디에 적어서 mainactivity에서 호출해야하는데 어떻게 호출하는지 너무 머리아프네요..
아무래도 listview에 대한 개념정리가 조금 부족해보이시는데

listview의 각 아이템의 움직임을 컨트롤하는건 activity에서 호출하는것이 아닌

adapter에서 getView()메서드 안에 코딩된것을 반복적으로 처리해주게 됩니다.
 
따라서 url을 클래스에 넣을때는 activity에서
 list.add( new MainDTO("3", "머시따", "시즌별 완벽 코디제안", R.drawable.musidda));
이 부분에  url을 넣어주어야 하는데 그렇게 하기 위해서는 MainDTO 클래스에 String url; 변수를 생성 후 생성자를 수정해 주어야합니다.

MainDTO클래스의 생성자는
public MainDTO(String num, String title, String content, int imgIcon, String url) {
        this.num = num;
        this.title = title;
        this.content = content;
        this.imgIcon = imgIcon;
        this.url = url;
    }
이런식으로 생성자를 새로 바꾸어주면 activity에서 url을 넣을때는

 list.add( new MainDTO("3", "머시따", "시즌별 완벽 코디제안", R.drawable.musidda),"www.url.com");
요런식으로 url을 각 아이템에 넣을수가 있게됩니다.

 그후 getter setter 메서드를 생성해 주고 adapter 클래스에 가서 클릭리스너를 달아주고 url로 연결되도록 코딩해주시면 되겠습니다
...