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

커스텀 리스트뷰 질문인데요 그 안에 버튼으로 url 링크하는거 질문입니다.

0 추천

 

public class AquaSite extends Activity {
 ArrayList<MyItem> arItem;

 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.aquasite);

  arItem = new ArrayList<MyItem>();
  MyItem mi;
  mi = new MyItem(R.drawable.icon, "주니수족관", "http://www.cotwo.co.kr/main/index.php","07076390874");
  arItem.add(mi);
  mi = new MyItem(R.drawable.icon, "춘자네수족관","","");
  arItem.add(mi);
  mi = new MyItem(R.drawable.icon, "아쿠아1004","","");
  arItem.add(mi);
  mi = new MyItem(R.drawable.icon, "상아쿠아","","");
  arItem.add(mi);
  mi = new MyItem(R.drawable.icon, "한강수족관","","");
  arItem.add(mi);
  mi = new MyItem(R.drawable.icon, "에이엠펫","","");
  arItem.add(mi);

  MyListAdapter MyAdapter = new MyListAdapter(this,
    R.layout.aquasite_lv, arItem);

  ListView MyList;
  MyList = (ListView) findViewById(R.id.list);
  MyList.setAdapter(MyAdapter);
  
 }

}

// 리스트 뷰에 출력할 항목
class MyItem {
 MyItem(int aIcon, String aName, String aSite, String aPhone) {
  Icon = aIcon;
  Name = aName;
  Site = aSite;
  Phone = aPhone;
 }

 int Icon;
 String Name;
 String Site;
 String Phone;
}

// 어댑터 클래스
class MyListAdapter extends BaseAdapter{
 Context maincon;
 LayoutInflater Inflater;
 ArrayList<MyItem> arSrc;
 int layout;

 public MyListAdapter(Context context, int alayout, ArrayList<MyItem> aarSrc) {
  maincon = context;
  Inflater = (LayoutInflater) context
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  arSrc = aarSrc;
  layout = alayout;
 }

 public int getCount() {
  return arSrc.size();
 }

 public String getItem(int position) {
  return arSrc.get(position).Name;
 }

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

 // 각 항목의 뷰 생성
 public View getView(int position, View convertView, ViewGroup parent) {
  final int pos = position;
  if (convertView == null) {
   convertView = Inflater.inflate(layout, parent, false);
  }
  ImageView img = (ImageView) convertView.findViewById(R.id.img);
  img.setImageResource(arSrc.get(position).Icon);

  TextView txt = (TextView) convertView.findViewById(R.id.text);
  txt.setText(arSrc.get(position).Name);

  Button btn = (Button) convertView.findViewById(R.id.btn);
  btn.setOnClickListener(new Button.OnClickListener() {
   public void onClick(View v) {
    String str = arSrc.get(pos).Name + "로 전화합니다.";
    Toast.makeText(maincon, str, Toast.LENGTH_SHORT).show();
   }
  });
  Button btn2 = (Button) convertView.findViewById(R.id.btn2);
  btn.setOnClickListener(new Button.OnClickListener() {
   public void onClick(View v) {
    String str = arSrc.get(pos).Name + "홈페이지를 방문합니다.";
    Toast.makeText(maincon, str, Toast.LENGTH_SHORT).show();
    Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse(arSrc.get(pos).Site));
    startActivity(i);
   }
  });


  return convertView;
 }

}

 

일단 aquasite.xml 은 그냥 리스트뷰의 xml이구요..

aquasite_lv.xml 은 리스트뷰하나하나의 레이아웃을 정해주는 xml 입니다.. 이곳에 버튼 2개가 있구요..

 

위의 코드에서 빨간색으로 덮은 곳에서 에러가 나는데요.. 왜 엑티비티를 시작할 수 없는지 궁금합니다..ㅜㅜ

이것 때문에 지금 5시간 넘게 고민하고 있는데 잘해결이 안되네요.. 꼭 좀 해결해주세요 ㅜ

슈퍼안드로이드맨요 (160 포인트) 님이 2013년 6월 22일 질문

2개의 답변

0 추천
startActivity는 Context에 정의되어 있는 메소드 입니다.

context를 참조해야 실행할 수 있고요,

물론 context가 어디에서 온 것이냐(activity냐 application이냐 service냐 등등)에 따라 동작이 차이날 수 있으니

관련 검색해보세요.
b22n (22,940 포인트) 님이 2013년 6월 24일 답변
0 추천
에러 로그만 잘 보셔도 5시간까지 고민할 필요가 없는 오류일텐데요;;

maincon.startActivity(i) 로 바꿔서 해보시기 바랍니다. 개념적인 설명은 멋젓분이 달아두셧네요
Gradler (109,780 포인트) 님이 2013년 6월 24일 답변
...