안드로이드 확장 리스트뷰와 터치 이벤트에 관해서

조회수 1485회

public class PlatformMenuContentsUI extends AbstractUIFragment {

public void onAttach(Activity activity) { super.onAttach(activity); }

public static PlatformMenuContentsUI newInstance() { PlatformMenuContentsUI f = new PlatformMenuContentsUI(); return f; }

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

    // 리스트뷰에 대한 정의

  final String[] menuItems = { "General",
        "Rader",
        "Targets",
            "Alarm",
            "Initial Setup" };

  final TextView mart_reg_txt = (TextView) v.findViewById(R.id.mart_reg_txt);                                     // 텍스트뷰에 대한 정의

    final ExpandableListView general_elv = (ExpandableListView) v.findViewById(R.id.ex_general_list);               // 확장 리스트뷰에 대한 정의
    final ExpandableListView rader_elv = (ExpandableListView) v.findViewById(R.id.ex_rader_list);

    final ListView listView = (ListView) v.findViewById(R.id.main_list);                                            // 리스트뷰에 대한 정의

    final ArrayAdapter<String> listViewAdapter = new ArrayAdapter<String>(                                          // 리스트뷰를 연결 시켜 줄 어댑터에 대한 정의, simple_list_item_1 을 xml 파일을 만들어서 변경해주면 폰트의 크기 및 색상이 변경 가능
        getActivity(),
        R.layout.ex_list_custom,
        menuItems
);
    listView.setAdapter(listViewAdapter);


    /*
  general_elv.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { // 리스트뷰의 첫 번째 항목에 대한 확장 리스트뷰의 부모들의 클릭 이벤트
        @Override
        public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {
            switch (i) {
                case 0 :
                    Toast.makeText(getActivity(), "첫번째 확장 리스트뷰 입니다", Toast.LENGTH_SHORT).show();
                    break;

                case 1 :
                    Toast.makeText(getActivity(), "두번째 확장 리스트뷰 입니다", Toast.LENGTH_SHORT).show();
                    break;
            }
            return false;
        }
    });
    */


    general_elv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {  // 리스트뷰의 첫 번째 항목에 대한 확장 리스트뷰의 자식들의 클릭 이벤트
        @Override
        public boolean onChildClick(ExpandableListView general_ex, View general_view, int i, int i1, long l) {
            if ( i == 0 ) { // i(부모)가 0번 일 경우
                switch (i1) {
                    case 0 :
                        Toast.makeText(getActivity(), "한국어를 선택하였습니다.", Toast.LENGTH_SHORT).show();
                        break;

                    case 1 :
                        Toast.makeText(getActivity(), "日本語を 選択しました。 ", Toast.LENGTH_SHORT).show();
                        break;

                    case 2 :
                        Toast.makeText(getActivity(), "You have chosen English.", Toast.LENGTH_SHORT).show();
                        break;

                    case 3 :
                        Toast.makeText(getActivity(), "中文选择了", Toast.LENGTH_SHORT).show();
                        break;
                }
            }

            if ( i == 1 ) { // i(부모)가 1번 일 경우
                switch (i1) {
                    case 0 :
                }
            }

            if ( i == 2 ) {
                switch(i1) {
                    case 0 :
                        Intent intent_naver = new Intent(Intent.ACTION_VIEW);
                        Uri uri_naver = Uri.parse("http://m.naver.com");
                        intent_naver.setData(uri_naver);
                        startActivity(intent_naver);
                        break;

                    case 1 :
                        Intent intent_daum = new Intent(Intent.ACTION_VIEW);
                        Uri uri_daum = Uri.parse("http://m.daum.net");
                        intent_daum.setData(uri_daum);
                        startActivity(intent_daum);
                        break;
                }
            }

    return false;
}

}); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { // 리스트 클릭 이벤트 @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { switch (position) { case 0: // Toast.makeText(getActivity(), "첫번째 리스트를 클릭", Toast.LENGTH_SHORT).show(); general_elv.setAdapter(new GeneralTabsListAdapter()); rader_elv.setAdapter((ExpandableListAdapter) null); mart_reg_txt.setText(null); //mart_reg_txt.setText("첫번째 리스트를 클릭하셨습니다."); break;

     case 1:
        // Toast.makeText(getActivity(), "두번째 리스트를 클릭", Toast.LENGTH_SHORT).show();
                  general_elv.setAdapter((ExpandableListAdapter) null);
                  rader_elv.setAdapter(new RaderTabsListAdapter());
                  mart_reg_txt.setText(null);
                  //mart_reg_txt.setText("Rader 리스트는 준비중입니다.");
        break;

     case 2:
        // Toast.makeText(getActivity(), "세번째 리스트를 클릭", Toast.LENGTH_SHORT).show();
                  general_elv.setAdapter((ExpandableListAdapter) null);
                  rader_elv.setAdapter((ExpandableListAdapter) null);
                  mart_reg_txt.setText("Targets 리스트는 준비중입니다.");
        break;

              case 3 :
                  // Toast.makeText(getActivity(), "세번째 리스트를 클릭", Toast.LENGTH_SHORT).show();
                  general_elv.setAdapter((ExpandableListAdapter) null);
                  rader_elv.setAdapter((ExpandableListAdapter) null);
                  mart_reg_txt.setText("Alarm 리스트는 준비중입니다.");
                  break;

              case 4 :
                  // Toast.makeText(getActivity(), "세번째 리스트를 클릭", Toast.LENGTH_SHORT).show();
                  general_elv.setAdapter((ExpandableListAdapter) null);
                  rader_elv.setAdapter((ExpandableListAdapter) null);
                  mart_reg_txt.setText("Initial Setup 리스트는 준비중입니다.");
                  break;

  }

} });

  listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {  // 리스트의 롱 클릭 이벤트
      @Override
      public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long l) {
          switch (position) {
              case 0 :
                  Toast.makeText(getActivity(), "첫번째 리스트를 롱 클릭", Toast.LENGTH_SHORT).show();
                  break;

              case 1 :
                  Toast.makeText(getActivity(), "두번째 리스트를 롱 클릭", Toast.LENGTH_SHORT).show();
                  break;

              case 2 :
                  break;
          }
          return true;
      }
  });

return v; }

public class GeneralTabsListAdapter extends BaseExpandableListAdapter {

  private String[] groups = {"☆Language", "☆Units", "☆Time Offset", "☆Key Volume", "☆Buzzer", "☆HDMI", "☆Factory Reset"};

  private String[][] chilren = {
          // 기본적으로 확장 리스트뷰의 글자크기 및 속성 변경 하는 커스텀 방법 찾기
          { "한국어", "日本語", "English", "中文" }, // Toast 출력, 1번 완료
          {  }, // 같은 영역에 텍스트 출력, 2번 완료 ( 추가로 뒤로가기 버튼 만들어보기 - 보류 )
          { "Naver(네이버)", "Daum(다음)" }, // 인터넷 연결, 3번 완료
          { "알림창", "알림창 [2]", "알림창 [3]" }, // 새로운 창 띄우기, 4번 완료 ( 리스트뷰, 라디오박스, 체크박스 모두 완료 )
          { "일번", "이번", "삼번", "사번" },
          { "일번", "이번", "삼번", "사번" },
          { "일번", "이번", "삼번", "사번" }
  };

  // private Context mContext;


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

  @Override
  public int getChildrenCount(int i) {
      return chilren[i].length;
  }

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

  @Override
  public Object getChild(int i, int i1) {
      return chilren[i][i1];
  }

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

  @Override
  public long getChildId(int i, int i1) {
      return i1;
  }

  @Override
  public boolean hasStableIds() {
      return true;
  }

  @Override
  public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
      TextView textView = new TextView(PlatformMenuContentsUI.this.getActivity());
      textView.setText(getGroup(i).toString());
      return textView;
  }

  @Override
  public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
      TextView textView = new TextView(PlatformMenuContentsUI.this.getActivity());
      textView.setText(getChild(i, i1).toString());
      return textView;
  }

  @Override
  public boolean isChildSelectable(int i, int i1)
  {
      return true;
  }

}

@Override
public void DataProtocol(Object protocol) {
    FragmentProtocol proto = (FragmentProtocol) protocol;
    Log.i("TEST","CMD : "+proto.get_cmd()+" INDEXNAME "+ proto.get_title());
}

@Override
public void setController(Object o) {
    // TODO Auto-generated method stub
    _controller = (MainController) o;
}

}

일단 현재 코드입니다.

이 코드에서 확장 리스트뷰에 부모그룹과 자식 그룹에 각각 커스텀을 해주려면 어떤식으로 해얗라까요?

그리고 화면을 터치했을 때, 좌표를 구하려고 하는데 어떤식으로 코딩을 해야할까요?

한 2주째 고민중인데 두 문제다 전혀 해결에 기미가 안보이네요 ㅠㅠ

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

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

(ಠ_ಠ)
(ಠ‿ಠ)