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

listview에서 각각의 item에 하이퍼 링크걸기

0 추천
public class MainActivity extends AppCompatActivity {
    ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       ArrayList<MainDTO> list = new ArrayList<MainDTO>();
        list.add(new MainDTO("조군샵", "최신트렌드 코디팁으로 시선강탈! 조군샵으로 더 멋지고 당당하게! 신규상품 5%할인"
, R.drawable.jogun, "joIntent"));
        list.add(new MainDTO("훈스", "SNS 남자쇼핑몰 좋아요 1000만, 남자쇼핑몰, 여자들이 직접뽑은 코디", 
R.drawable.huns, "http://www.hun-s.com"));
        list.add(new MainDTO("머시따", "시즌별 완벽 코디제안", 
R.drawable.musidda, "http://www.meosidda.com/"));
        list.add(new MainDTO("미스터스트릿", "시즌별 BEST 아이템 가성비 甲", 
R.drawable.street, "http://www.mr-s.co.kr"));
        list.add(new MainDTO("비시크", "당일배송, 댄디/캐쥬얼함", 
R.drawable.bechic, "http://www.bechic.co.kr"));
        list.add(new MainDTO("어반클로", "심쿵스타일 부담없는 가격 예쁜 디자인 남자쇼핑몰", R.drawable.urbanclo, "http://www.urbanclo.co.kr"));
        list.add(new MainDTO("샤이피플", "오늘주문하고 내일바로입자! 트렌디한 남자데일리룩", 
listView = (ListView) findViewById(R.id.listview);
        MainCustomAdapter adapter =
                new MainCustomAdapter(
                        getApplicationContext(),
                        R.layout.man, list);
        listView.setAdapter(adapter);
        // 리스트 클릭시
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                ListView listView = (ListView) parent;
                String item = (String) listView.getItemAtPosition(position);
                // Web Browser
                Intent joIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(joIntent);
            }
        });
    }
}
public class MainDTO {
    String title;
    String content;
    int imgIcon;
    String url;
    public MainDTO(String title, String content, int imgIcon, String url) {
        this.title = title;
        this.content = content;
        this.imgIcon = imgIcon;
        this.url = url;
   }
    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 String getUrl()  {return url; }
    public void setUrl(String url) {this.url = url;}
}
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 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);

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

        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ctx.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(dto.url)));
            }
        });
        return convertView;
    }
}
지금 이상태인데 홈페이지주소를 어디에 입력후 어떻게 불러와서 링크거는지 모르겠습니다.. 
고수님들 도와주세요 초보입니다 ㅠㅠ
dlsrb46 (180 포인트) 님이 2017년 10월 18일 질문
로그캣 보시면 에러로그 나올텐데 그것도 올려주세요.
시간되면 아는 범위 내로 도와드릴게요~
10-20 00:28:59.718 11818-11818/com.example.administrator.daily E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                 Process: com.example.administrator.daily, PID: 11818
                                                                                 android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
                                                                                     at android.app.ContextImpl.startActivity(ContextImpl.java:672)
                                                                                     at android.app.ContextImpl.startActivity(ContextImpl.java:659)
                                                                                     at android.content.ContextWrapper.startActivity(ContextWrapper.java:331)
                                                                                     at com.example.administrator.daily.MainCustomAdapter$1.onClick(MainCustomAdapter.java:71)
                                                                                     at android.view.View.performClick(View.java:5198)
                                                                                     at android.view.View$PerformClick.run(View.java:21147)
                                                                                     at android.os.Handler.handleCallback(Handler.java:739)
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                     at android.os.Looper.loop(Looper.java:148)
                                                                                     at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

2개의 답변

0 추천
list.add(new MainDTO("머시따", "시즌별 완벽 코디제안", 
R.drawable.musidda, "홈페이지 주소 입력하세요"));
익명사용자 님이 2017년 10월 18일 답변
지금그렇게햇는데 충돌나서 질문드리는겁니다
그럼 에러로그를 올려주세요
10-20 00:28:59.718 11818-11818/com.example.administrator.daily E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                 Process: com.example.administrator.daily, PID: 11818
                                                                                 android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
                                                                                     at android.app.ContextImpl.startActivity(ContextImpl.java:672)
                                                                                     at android.app.ContextImpl.startActivity(ContextImpl.java:659)
                                                                                     at android.content.ContextWrapper.startActivity(ContextWrapper.java:331)
                                                                                     at com.example.administrator.daily.MainCustomAdapter$1.onClick(MainCustomAdapter.java:71)
                                                                                     at android.view.View.performClick(View.java:5198)
                                                                                     at android.view.View$PerformClick.run(View.java:21147)
                                                                                     at android.os.Handler.handleCallback(Handler.java:739)
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                     at android.os.Looper.loop(Looper.java:148)
                                                                                     at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
0 추천
정확한건 에러로그를 봐야 파악이 되겠지만

 

현재 클릭리스너를 통해 웹페이지를 호출하는 부분이 두 부분으로 보입니다.

 

액티비티의 listview.setOnItemClickListener 부분과

 

아답터 내의 convertview.setOnClickListener 부분

 

액티비티의 listview.setOnItemClickListener 부분을 한번 주석처리하고 실행해보시면 좋겠습니다.
시공조아 (1,650 포인트) 님이 2017년 10월 19일 답변
10-20 00:28:59.718 11818-11818/com.example.administrator.daily E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                 Process: com.example.administrator.daily, PID: 11818
                                                                                 android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
                                                                                     at android.app.ContextImpl.startActivity(ContextImpl.java:672)
                                                                                     at android.app.ContextImpl.startActivity(ContextImpl.java:659)
                                                                                     at android.content.ContextWrapper.startActivity(ContextWrapper.java:331)
                                                                                     at com.example.administrator.daily.MainCustomAdapter$1.onClick(MainCustomAdapter.java:71)
                                                                                     at android.view.View.performClick(View.java:5198)
                                                                                     at android.view.View$PerformClick.run(View.java:21147)
                                                                                     at android.os.Handler.handleCallback(Handler.java:739)
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                     at android.os.Looper.loop(Looper.java:148)
                                                                                     at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
아답터 내부의 onclick()메서드 안에서 intent 호출하는 부분에서 에러가 발생이 되네요

ctx.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(dto.url)));  이 부분을

((MainActivity)ctx).startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(dto.url))); 이 코드로 고쳐서 한번 실행해 보시겠어요?
10-21 14:23:23.446 2509-2509/com.example.administrator.daily E/AndroidRuntime: FATAL EXCEPTION: main
                                                                               Process: com.example.administrator.daily, PID: 2509
                                                                               java.lang.ClassCastException: android.app.Application cannot be cast to com.example.administrator.daily.MainActivity
                                                                                   at com.example.administrator.daily.MainCustomAdapter$1.onClick(MainCustomAdapter.java:71)
                                                                                   at android.view.View.performClick(View.java:5198)
                                                                                   at android.view.View$PerformClick.run(View.java:21147)
                                                                                   at android.os.Handler.handleCallback(Handler.java:739)
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                   at android.os.Looper.loop(Looper.java:148)
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
안되여 ㅠㅠㅠㅠㅠ MainActivity부분이 회색이던데 왜이러죠..??
Casting 'ctx' to 'MainActivity' is redundant 라고 뜨네용...
...