- 콤보박스 같은 기능 구현하기.

- 목록 선택하면 하단에 Toast로 선택한 내용 표시하기.

 

 

(1) activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:entries="@array/items"/>

    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/spinner1" />

</RelativeLayout>

 

 

(2)MainActivity.java

package com.example.test14_spinner;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class MainActivity extends Activity {
    Spinner spinner;
    String arr[]={"민들레","장미","목련꽃","개나리"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        //스피너 참조값 얻어오기
        spinner=(Spinner)findViewById(R.id.spinner2);

 

        //어댑터 만들기
        ArrayAdapter<String> adapter=
            new ArrayAdapter<String>(this,
                    android.R.layout.simple_spinner_item,
                    arr);
        //드롭다운할때 보여질 뷰 지정
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
       
        //어댑터와 스피너 연결하기
        spinner.setAdapter(adapter);

 

        //스피너를 선택했을때 이벤트 설정하기(선택항목 출력)
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View v,
                    int position, long id) {
                //선택된 인덱스에 해당하는 값을 arr배열에서 얻어오기
                String str=arr[position];
                Toast.makeText(MainActivity.this,"선택한 항목:" + str,
                        Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
    
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }   
}

 

item1.xml layout파일을 ListView에 붙이고, 이벤트 추가 하기.

- 버튼을 누르면 Toast를 이용해서 이미지내용을 보여준다. 

 

 

(1) activity_main.xml

; ListView하나만 붙인다.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >
    </ListView>

</RelativeLayout>

 

 

(2) item1.xml

; ImageView , TextView, Button을 붙인 layout을 만든다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:padding="10dp">
    <ImageView  android:id="@+id/img"
          android:src="@drawable/ic_launcher"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentLeft="true"
          android:adjustViewBounds="true"/>
    <TextView android:id="@+id/txt"
        android:layout_width="180dp"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:paddingLeft="10dp"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@id/img"
        android:text="test"/>
 <Button  android:id="@+id/btn"
     android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="주문"/>
</RelativeLayout>

 

 

(3) MainActivity.java

package com.example.test13_listview;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ListView;

public class MainActivity extends Activity {
    ListView listView;
    ArrayList<MyItem> list=new ArrayList<MyItem>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        listView=(ListView)findViewById(R.id.listView1);
        //배열에 값 저장하기
        list.add(new MyItem(R.drawable.bird,"예쁜새"));
        list.add(new MyItem(R.drawable.boy,"소년그림"));
        list.add(new MyItem(R.drawable.coffe,"맛있는커피"));
        list.add(new MyItem(R.drawable.fruit,"맛있는과일"));
       
        //어댑터 만들기
        MyListAdapter adapter=new MyListAdapter(this,R.layout.item1, list);


        //리스트뷰와 어댑터 연결하기
        listView.setAdapter(adapter);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

 

 

 

(4) MyListAdapter.java

convertView : 안드로이드가 전달해주는 해당리스트 항목 뷰
 뷰가 스크롤할때마다 생성해서 보여주면 자원의 효율성에서 문제가 있으므로 생성된 뷰 정보를 가지고 있다가 다시 보여주면 getView에서 이 뷰를 리턴하는데 이것이 convertView이다.
 처음보일때는 생성된 것이 없으므로 null이지만 이미 보여진 내용을 스크롤해서 다시 보여지면 이때는 null이 아니다.

 

package com.example.test13_listview;

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

 

// 사용자 정의 어댑터 클래스 만들기
// 어댑터(데이터(모델)+보여줄형식(레이아웃))
public class MyListAdapter extends BaseAdapter{
    private Context context;
    private int layoutId;
    private ArrayList<MyItem> list;
    private LayoutInflater inflater;//레이아웃 xml파일을 자바객체로 변환하기 위한객체
    /**
     *
     * @param context    : 컨텍스트
     * @param layoutId   : 보여줄 레이아웃
     * @param list       : 보여줄 데이터를 갖고있는 배열
     */
    public MyListAdapter(Context context,int layoutId,ArrayList<MyItem> list) {
        this.context=context;
        this.layoutId=layoutId;
        this.list=list;
        //LayoutInflater 객체 얻어오기(레이아웃xml파일을 자바객체로 변환하기 위해서)
        inflater=
        (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    //항목의 갯수 반환
    @Override
    public int getCount() {       
        return list.size();
    }
    //position에 해당하는 항목 반환
    @Override
    public Object getItem(int position) {
        return list.get(position);
    }
    //항목에 해당하는 아이디 반환
    @Override
    public long getItemId(int position) {
        return position;
    }
    //각 항목뷰+에 어떻게 보여질지를 정의
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView==null){//항목뷰가 한번도 보여진적이 없는 경우
            //레이아웃(item1.xml)을 자바객체로 변환하기
            convertView=inflater.inflate(layoutId,parent,false);
        }
        //////  convertView에 어떻게 보여질지 설정   ////////////
        //텍스트뷰에 제품명 넣기
        TextView txt=(TextView)convertView.findViewById(R.id.txt);
        final MyItem item=list.get(position);
        txt.setText(item.getItemName());
        //이미지뷰에 제품이미지 넣기
        ImageView img=(ImageView)convertView.findViewById(R.id.img);
        img.setImageResource(item.getIconID());
       
        //버튼을 눌렀을때 선택된 제품명 출력하기
        Button btn=(Button)convertView.findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {       
            @Override
            public void onClick(View v) {
                String name=item.getItemName();
                //토스트로 출력하기
                Toast.makeText(context,"선택된 제품:"+ name,Toast.LENGTH_SHORT).show();
            }
        });
       
        ////////////////////////////////////////////////////////////
        return convertView;
    }
}

 

 

(5) MyItem.java

package com.example.test13_listview;

public class MyItem {
    private int iconID;//아이콘 리소스 아이디 저장(이미지)
    private String itemName;//텍스트뷰에 보여질 제품명
   
    public MyItem() {
        // TODO Auto-generated constructor stub
    }
    public MyItem(int iconID,String itemName){
        this.iconID=iconID;
        this.itemName=itemName;
    }
    public int getIconID() {
        return iconID;
    }
    public void setIconID(int iconID) {
        this.iconID = iconID;
    }
    public String getItemName() {
        return itemName;
    }
    public void setItemName(String itemName) {
        this.itemName = itemName;
    }   
}

 

만든 layout : item1.xml을 activity_main.xml의 ListView에 붙이기.

 

 

(1) activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >
    </ListView>

</RelativeLayout>

 

 

(2) item1.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="#ffffff"
    android:textSize="25sp"
    android:background="#000000"
    android:layout_margin="3dp"
    android:text="aaa">
</TextView>

 

(3)MainActivity.java

package com.example.test12_listview;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.app.ListActivity;
import android.view.Menu;
import android.widget.ArrayAdapter;

 

public class MainActivity extends ListActivity {
 ArrayList<String> arr=new ArrayList<String>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        arr.add("봄");
        arr.add("여름");
        arr.add("가을");
        arr.add("겨울");
       
        ArrayAdapter<String> adapter=
         new ArrayAdapter<String>(this,
           R.layout.item1, //사용자가 만든 뷰를 항목뷰로 설정하기
           arr);
       
        setListAdapter(adapter);
    }  
}

Activity가 아닌 ListActivity를 상속받아 ListView 처리하기.

 

; ListActivity 를 사용할때는 아이디가 list인 리스트뷰가 반드시 존재해야 한다!

 

 

 

(1) activity_main.xml

ListActivity 를 사용할때는 아이디가 list인 리스트뷰가 반드시 존재해야 한다!
@android:id ==> 안드로이드에서 이미 만들어 놓은 아이디 사용

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >  

    <ListView android:id="@android:id/list" 
       android:layout_width="match_parent"
       android:layout_height="match_parent">
   </ListView>
</RelativeLayout>

 

 

(2) MainActivity.java

package com.example.test11_listview;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.app.ListActivity;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

 

public class MainActivity extends ListActivity {
    ArrayList<String> arr=new ArrayList<String>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        arr.add("딸기");
        arr.add("포도");
        arr.add("오렌지");
        arr.add("복숭아");
       
        //리스트뷰와 연결될 어댑터뷰 만들기
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,arr);
        //리스트뷰에 어댑터 연결하기
        setListAdapter(adapter);
    }

     //리스트의 항목을 클릭하면 자동호출(이벤트리스너를 등록하지 않아도 자동호출!)
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        //선택한 항목값 얻어오기
        String item=arr.get(position);
        Toast.makeText(this,"선택항목:" + item,Toast.LENGTH_SHORT).show();
    }

 

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }   
}

값입력 후 ListView에 추가하기.

ListView선택한 값 Toast이용해서 보이기.

 

 

 

(1) activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
 <LinearLayout android:id="@+id/layout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true">
        <EditText  android:id="@+id/edt1"
             android:layout_width="200dp"
          android:layout_height="wrap_content"
          android:hint="추가할 항목입력"/>
        <Button  android:id="@+id/btnAdd"
             android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:text="추가"/>
        <Button  android:id="@+id/btnDel"
             android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          android:text="삭제"/>
    </LinearLayout>
    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/layout1" >
    </ListView>
</RelativeLayout>

 

(2) MainActivity.java

package com.example.test10_listview;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

 

public class MainActivity extends Activity {
    ListView listView;
    ArrayList<String> list=new ArrayList<String>();
    Button btnAdd;
    Button btnDel;
    ArrayAdapter<String> adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        list.add("딸기우유");
        list.add("바나나우유");
        list.add("포도쥬스");
        list.add("토마토쥬스");
       
        listView=(ListView)findViewById(R.id.listView1);
        btnAdd=(Button)findViewById(R.id.btnAdd);
        btnDel=(Button)findViewById(R.id.btnDel);
       
        //어댑터객체 생성
        adapter=
         new ArrayAdapter<String>(this,//Context객체
                 android.R.layout.simple_list_item_single_choice,//보여질레이아웃형태
                 list //보여질데이터를 담고있는 배열
            );


        //하나의 항목을 선택할 수 있는 모드 설정
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);


        //어댑터와 리스트뷰 연결하기
        listView.setAdapter(adapter);


        //항목을 선택했을때 수행할 동작 처리(이벤트 처리)
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent,//이벤트가 발생된 뷰
                                    View v,//이벤트가 발생된 차일드 뷰
                                    int position,//이벤트가 발생된 항목의 위치
                                    long id//이벤트가 발생된 뷰 id
                                    ){
                //ArrayList에서 position에 해당하는 데이터 얻어오기
                String item=list.get(position);
                //토스트로  출력하기
                Toast.makeText(MainActivity.this,
                    "선택항목:"+item,
                    Toast.LENGTH_SHORT).show();
            }
        });
       
        final EditText edt=(EditText)findViewById(R.id.edt1);


        //버튼을 눌렀을때 입력된 항목 추가하기
        btnAdd.setOnClickListener(new View.OnClickListener() {   
            @Override
            public void onClick(View v) {
                //입력된 문자열 얻어오기
                String str=edt.getText().toString();
                //입력된 값을 ArrayList에 추가하기
                list.add(str);
                //모델객체가 변경되었음을 어댑터뷰에 알리기
                adapter.notifyDataSetChanged();
                //입력된 값 지우기
                edt.setText("");
            }
        });


        btnDel.setOnClickListener(new View.OnClickListener() {   
            @Override
            public void onClick(View v) {
                //선택된 항목의 인덱스 얻어오기
                int pos=listView.getCheckedItemPosition();
                //ArrayList에서 항목 지우기
                list.remove(pos);
                //어댑터에 항목이 바뀜을 알리기
                adapter.notifyDataSetChanged();
                //선택한 항목표시 없애기
                listView.clearChoices();
            }
        });  
    }
}

+ Recent posts