차일드 expandable리스트뷰 각각이 클릭이 되게 하고 싶습니다.(Inside fragment)

조회수 1700회

우선 권태환님 도움으로(감사드립니다..꾸벅) 클릭이벤트를 적용시키긴했으나 아직 각각 다르게 클릭이 가능하게는 못하겠어서 질문 재차 올립니다 ㅠㅠ


   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        groups = new String[]{};

        children = new String[][]{
    };
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_lineup, container, false);

        return rootView;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        lv = (ExpandableListView) view.findViewById(R.id.expListView);


    }

    public class ExpandableListAdapter extends BaseExpandableListAdapter {

        private final LayoutInflater inf;
        private String[] groups;
        private String[][] children;

        public ExpandableListAdapter(String[] groups, String[][] children) {
            this.groups = groups;
            this.children = children;

        }

        @Override
        public int getGroupCount() {
            return groups.length;
        }

        @Override
        public int getChildrenCount(int groupPosition) {
            return children[groupPosition].length;
        }

        @Override
        public Object getGroup(int groupPosition) {
            return groups[groupPosition];
        }

        @Override
        public Object getChild(int groupPosition, int childPosition) {
            return children[groupPosition][childPosition];
        }

        @Override
        public long getGroupId(int groupPosition) {
            return groupPosition;
        }

        @Override
        public long getChildId(int groupPosition, int childPosition) {
            return childPosition;
        }

        @Override
        public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

            ViewHolder holder;
            if (convertView == null) {
                convertView = inf.inflate(R.layout.list_item, parent, false);
                holder = new ViewHolder();

                holder.text = (TextView) convertView.findViewById(R.id.lblListItem);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }


토스트 넣어진 부분에 어떤식으로 코딩을 넣어야 Children 각 항목별로 다르게 클릭이 될까요? 각각 다른 인터넷 주소 링크를 걸고 싶습니다. 현재는 모든 children 아이템 부분에 같은 토스트가 출력이 되는 상태입니다. 도움부탁드립니당 ㅠㅠ!

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • Adapter에 넘기는 모델을 다음과 같이 작성하셨는데요.

    groups = new String[]{"운동", "학술", "봉사", "종교","공연", "방송, 신문","농활"};
    children = new String[][]{
                    {"a","b","c","d"},
                    {"ㄱ","ㄴ","ㄷ","d","ddd","hahahaha"},
                    {"ㄹ","ㅁ","ㅂ","ㅅ"},
                    {"ㅇ","ㅈ","ㅊ"},
                    {"d","dd"},
                    {"dssdg","sdfsd"},
                    {"ssssss","sssssssssss"};
    

    리스트를 클릭했을 때 이동하고자 하는 Url을 children 배열에 넣어보세요. 예를 들면 이런식입니다.

    children = new String[][]{
                    {"http://hashcode.co.kr","http://www.naver.com","http://www.daum.net","http://www.google.com"},
                    {"http://www.stackoveflow.com", "..."},
                    ...
                    ...
    
    

    그런 후 OnClickListener 내에서 groupPosition과 childPosition을 이용해 children 배열에서 Url을 가져오면 됩니다. 다음 코드를 이용해서 테스트 해보세요.

    holder.text.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(children[groupPosition][childPosition]));
            startActivity(intent);
        }
    });
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)