Custom ListView의 List 클릭했을 때, 내용이 바뀌게 하려면?

조회수 602회
        _Set_Data_List = new List<string>()
        { _HL_List[_HL_Default], _Ring_List[_Ring_Default], _VectTime_List[_VectTime_Default], _VectMode_List[_VectMode_Default], _WPT_List[_WPT_Default], _OS_List[_OS_Default],
        "TARGET ALARM", "GUARD ZONE", "FUNC BARGE", "TX STBY", "", "◁"};


        _DrawerAdapter = new ArrayAdapter<string>(_Context, Resource.Layout.Custom_DrawerList, Resource.Id._Custom_DrawerList_Text, _Set_Data_List);
        _IA_List.Adapter = _DrawerAdapter;


    private static void _IA_List_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
    {
        //switch (e.Position)
        //{
        //    case 0:
        //        if (_HL_Default < 4)
        //        {
        //            _HL_Default++;
        //        }
        //        else if (_HL_Default == 4)
        //        {
        //            _HL_Default = 0;
        //        }


        //        //_DrawerAdapter.Remove(_Set_Data_List[0]);
        //        //_Set_Data_List[0] = _HL_List[_HL_Default];
        //        //_DrawerAdapter.Insert(_Set_Data_List[0], 0);

        //        break;
}

이건 예전에 사용했던 코드인데, 이런식으로 ListView의 내용을 삭제했다가 다시 갱신하는 식으로 했엇는데요.

현재 코드는

    static int _HL_Default = 0;
    static string[] _HL_Small_List = { "OFF", "1", "2", "3", "4" };
    static int _Big_Data = 0;
    static string[] _Big_List = { "HL", "RING", "VECT TIME", "VECT MODE", "WPT MARK", "OS", "◁" };

        DrawerListAdapter _Adatper = new DrawerListAdapter(mContext);
        DrawerListItem _Item;

        for (int i = 0; i < 10; i++)
        {
            _Item = new DrawerListItem();
            _Item.GetSmall = _Big_List[_Big_Data];

            switch(_Big_Data)
            {
                case 0:
                    _Item.GetBig = _HL_Small_List[_HL_Default];
                    break;
                case 1:
                    _Item.GetBig = _Ring_Small_List[_Ring_Default];
                    break;
                case 2:
                    _Item.GetBig = _VectTime_Small_List[_VectTime_Default];
                    break;
                case 3:
                    _Item.GetBig = _VectMode_Small_List[_VectMode_Default];
                    break;
                case 4:
                    _Item.GetBig = _WPT_Small_List[_WPT_Default];
                    break;
                case 5:
                    _Item.GetBig = _OS_Small_List[_OS_Default];
                    break;
                case 6:
                    break;
                case 7:
                    break;
                case 8:
                    break;
                case 9:
                    break;
            }

            _Adatper.AddItem(_Item);
            _Big_Data++;
        }

        _IA_List.Adapter = _Adatper;

ViewHolder를 이용해서 하나의 리스트에 두개의 텍스트를 사용하여 각각 다른 크기로 내용도 다르게 설정해놓았습니다. 여기서 리스트에 0번을 눌렀을 때, 새로운 페이지나 이런게 열리는게 아니라 HL OFF 라고 되어있는 글이 HL 1 로 바뀌면서 다른 이벤트를 나타나게 하려면 어떻게 해야할까요?

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

1 답변

  • Item Click 시 position 을 알수 있는데, 이때 adapter 에 바인딩 된 dataSet, 즉 List 의 해당 position 의 값을 원하는 값으로 변경 한뒤에 adapter.notifyDataSetChanged() 를 호출 하시면 리스트 갱신을 할 수 있습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • private static void _IA_List_ItemClick(object sender, AdapterView.ItemClickEventArgs e) { switch (e.Position) { case 0: if (_HL_Default < 4) { _HL_Default++; } else if (_HL_Default == 4) { _HL_Default = 0; } _Item.GetBig = _HL_Small_List[_HL_Default]; _Adatper.NotifyDataSetChanged(); break; 이런식으로 하면 되는건가요? 알 수 없는 사용자 2018.9.14 08:52
    • 네 핵심은 adapter 와 바인딩 된 list 의 값을 변경 후 notifyDataSetChanged() 로 갱신 해주는 흐름입니다. 알 수 없는 사용자 2018.9.14 10:15
    • for문을 돌려놔서 그런지 계속 제일 아래 목록에서만 갱신이 되서 for문을 없애버리고 일단 다시 만들어봤습니다. _Adapter.AddItem(_HL_Small_List[_HL_Default], _Big_List[0]); 이렇게 만들고 switch (e.Position) { case 0: if (_HL_Default < 4) { _HL_Default++; } else if (_HL_Default == 4) { _HL_Default = 0; } _Adapter.NotifyDataSetChanged(); break; 이렇게 했을때, 어떻게 변환을 시켜주고 갱신을 시켜야 정상적으로 될까요? _Adpater.NotifyDataSetChanged();를 하기전에 _HL_Default 의 변환 값을 넣어줘야 하는거 같은데... 알 수 없는 사용자 2018.9.14 10:37

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

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

(ಠ_ಠ)
(ಠ‿ಠ)