AdapterView

10945 ワード




  • ContactActivity
    package com.example.ex0414;
    
    import   androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.widget.ListView;
    
    import java.util.ArrayList;
    
    public class ContactActivity extends AppCompatActivity {
        ListView lvContact;
        ContactAdapter adapter;
        ArrayList<ContactVO> list;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_contact);
    
            lvContact = findViewById(R.id.lvContact);
             list = new ArrayList<ContactVO>();
    
            for(int i =0; i<20; i++){
                list.add(new ContactVO(R.drawable.ic_launcher_background,
                    "스인개"+(i+1),"010-1234-123"+i ));
            }
    
            adapter = new ContactAdapter(
                ContactActivity.this,
                R.layout.list_item,
                list);
            lvContact.setAdapter(adapter);
    
        }
    }
  • コード解釈
       list = new ArrayList<ContactVO>();
    ユーザが所望するデータ型とタイプを含むために、ArrayListで宣言して格納するデータのVOをフォーマットとする.宣言されたArrayListには、
            list.add(new ContactVO(R.drawable.ic_launcher_background,
                "스인개"+(i+1),"010-1234-123"+i ));
        }
    反復文を使用して追加されます.接続
     adapter = new ContactAdapter(
           ContactActivity.this,
           R.layout.list_item,
           list);
       lvContact.setAdapter(adapter);
    宣言のContactAdapter(表示するアクティビティ、カスタムレイアウト、データ)
    listviewのアダプタを接続します.

  • 協力者の役割
  • リストビューに表示するアイテムビューを作成するロール
  • プロジェクトビューとデータを結合してビューオブジェクトに
  • を作成する

  • ContactAdapter.class
    package com.example.ex0414;
    
    import android.app.LauncherActivity;
    import android.content.Context;
    import android.content.Intent;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.Button;
    import android.widget.ImageButton;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    import java.util.ArrayList;
    
    public class ContactAdapter extends BaseAdapter {
        Context context;
        //R.~~~ 는 정수형으로 변환시켜준다고 생각하면 된다.
        int layout;
        //여러형태의 데이터를 담기때문에
        ArrayList<ContactVO> list;
    
        //xml 파일 -> View 객체로 변환해주는 객체, 중요
        LayoutInflater inflater;
    
        public ContactAdapter(Context context, int layout, ArrayList<ContactVO> list) {
            this.context = context;
            this.layout = layout;
            this.list = list;
            this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
    
        @Override
        public int getCount() {
            return list.size();
        }
    
        @Override
        //선택한 인덱스의 내용물?
        public Object getItem(int i) {
            return list.get(i);
        }
    
        @Override
        //선택한 인덱스를 반환하는 부분
        public long getItemId(int i) {
            return i;
        }
    
        @Override
        //직접적으로 구현해야되는 부분
        // i는 인덱스 역할, view는 layout에 대한 정보를 보관해줄 객체, ViewGroup은 리스트 뷰 어뎁터
        public View getView(int i, View view, ViewGroup viewGroup) {
            //아이템 뷰에 배치된 View객체들을 한 번 초기화
            ViewHolder holder = null;
    
            // list_item.xml -> View 객체로 변환
            if(view ==null){
                view = inflater.inflate(layout, viewGroup, false);
                holder = new ViewHolder(view);
    
                //초기화된 holder 객체를 view객체에 태그로 저장,setTag는 저장시키는 것
                view.setTag(holder);
            }else{
                //view객체에 저장된 holder객체를 가져와서 저장장
               holder = (ViewHolder) view.getTag();
            }
    
            //list_item.xml 안에 있는 ImageView, Textview, Button 초기화
    //        ImageView imageView = view.findViewById(R.id.imageView2);
    //        ImageButton btnCall = view.findViewById(R.id.call);
    //        TextView tvName = view.findViewById(R.id.name);
    //        TextView tvPhone = view.findViewById(R.id.phone);
            //생성한 View 객체를 활용
    //        ContactVO vo = (ContactVO) getItem(i);
    //        imageView.setImageResource(vo.getImg());
    //        tvName.setText(vo.getName());
    //        tvPhone.setText(vo.getPhone());
    
            ContactVO vo = (ContactVO) getItem(i);
            holder.getImageView().setImageResource(vo.getImg());
            holder.getTvName().setText(vo.getName());
            holder.getTvPhone().setText(vo.getPhone());
    
            holder.getBtnCall().setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view)     {
                    //context = ContactActivity를 가리킴
                    Toast.makeText(context,vo.getPhone(),Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(context,MainActivity.class);
                    //ContactAdapter는 액티비티가 아닌 일반클래스이기 때문에
                    //액티비티에서만 사용할 수 있는 메소드를 바로 호출이 불가능
                    // 사용하려면 액티비티 정보를 가진 Context 객체를 통해서 사용가능!
                    context.startActivity(intent);
    
                }
            });
    
                //생성된 Layout View객체를 리턴 -> listView에 출력
            return view; //젤 중요
          }
     }

  • コード解釈
      Context context;
      int layout;
      ArrayList<ContactVO> list;
    
      LayoutInflater inflater;
    
      public ContactAdapter(Context context, int layout, ArrayList<ContactVO> list) {
          this.context = context;
          this.layout = layout;
          this.list = list;
          this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    パラメータ受信データをConcactAdapterに初期化します.
    @Override
    public int getCount() {
        return list.size();
    }
    
    @Override
      public Object getItem(int i) {
        return list.get(i);
    }
    
    @Override
     public long getItemId(int i) {
        return i;
    }
    関連部分を返却します.(サイズ、インデックス内のデータ、インデックスID値)
      @Override
      
      public View getView(int i, View view, ViewGroup viewGroup) {
          //아이템 뷰에 배치된 View객체들을 한 번 초기화
          ViewHolder holder = null;
    
          // list_item.xml -> View 객체로 변환
          if(view ==null){
              view = inflater.inflate(layout, viewGroup, false);
              holder = new ViewHolder(view);
    
              //초기화된 holder 객체를 view객체에 태그로 저장,setTag는 저장시키는 것
              view.setTag(holder);
          }else{
              //view객체에 저장된 holder객체를 가져와서 저장장
             holder = (ViewHolder) view.getTag();
          }
    
          //list_item.xml 안에 있는 ImageView, Textview, Button 초기화
    //        ImageView imageView = view.findViewById(R.id.imageView2);
    //        ImageButton btnCall = view.findViewById(R.id.call);
    //        TextView tvName = view.findViewById(R.id.name);
    //        TextView tvPhone = view.findViewById(R.id.phone);
          //생성한 View 객체를 활용
    //        ContactVO vo = (ContactVO) getItem(i);
    //        imageView.setImageResource(vo.getImg());
    //        tvName.setText(vo.getName());
    //        tvPhone.setText(vo.getPhone());
    
          ContactVO vo = (ContactVO) getItem(i);
          holder.getImageView().setImageResource(vo.getImg());
          holder.getTvName().setText(vo.getName());
          holder.getTvPhone().setText(vo.getPhone());
    
          holder.getBtnCall().setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view)     {
                  //context = ContactActivity를 가리킴
                  Toast.makeText(context,vo.getPhone(),Toast.LENGTH_SHORT).show();
                  Intent intent = new Intent(context,MainActivity.class);
                  //ContactAdapter는 액티비티가 아닌 일반클래스이기 때문에
                  //액티비티에서만 사용할 수 있는 메소드를 바로 호출이 불가능
                  // 사용하려면 액티비티 정보를 가진 Context 객체를 통해서 사용가능!
                  context.startActivity(intent);
    
              }
          });
    
              //생성된 Layout View객체를 리턴 -> listView에 출력
          return view; //젤 중요
        }
    }
    直接実施が必要な部分
    iはインデックスロール、ビューはレイアウト情報を含むオブジェクト、View GroupはリストビューアDepter

  • ConcactVO.class
    ```
    package com.example.ex0414;
    
    public class ContactVO {
    private int img;
    private String name;
    private String phone;
    
    public ContactVO(){}
    
    public ContactVO(int img, String name, String phone) {
        this.img = img;
        this.name = name;
        this.phone = phone;
    }
    
    public int getImg() {
        return img;
    }
    
    public void setImg(int img) {
        this.img = img;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getPhone() {
        return phone;
    }
    
    public void setPhone(String phone) {
        this.phone = phone;
    }
    
    @Override
    public String toString() {
        return "ContactVO{" +
                "img=" + img +
                ", name='" + name + '\'' +
                ", phone='" + phone + '\'' +
                '}';
     }
    }
    ListViewに入れるデータを初期化またはロードします.

  • Viewholder
    package com.example.ex0414;
    
    import android.view.View;
    import android.widget.ImageButton;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    //아이탬뷰에 배치된
    public class ViewHolder {
      private ImageView imageView;
      private TextView tvName;
      private TextView tvPhone;
      private ImageButton btnCall;
    
      public ViewHolder(View itemView){
          imageView = itemView.findViewById(R.id.imageView2);
          btnCall = itemView.findViewById(R.id.call);
          tvName = itemView.findViewById(R.id.name);
          tvPhone = itemView.findViewById(R.id.phone);
      }
    
      public ImageView getImageView() {
          return imageView;
      }
    
      public TextView getTvName() {
          return tvName;
      } 
    
      public TextView getTvPhone() {
          return tvPhone;
      }
    
      public ImageButton getBtnCall() {
          return btnCall;
      }
    }
    CustomListViewの各プロパティ値を初期化して返します.