기술 블로그

[안드로이드 복습] 10장 화면제약을 극복하기(스크롤뷰와 리스트뷰) 본문

Android

[안드로이드 복습] 10장 화면제약을 극복하기(스크롤뷰와 리스트뷰)

jaegwan 2018. 11. 16. 20:06
반응형

엑티비티가 아닌 클래스에는 Layoutinflater 로 로드한 view에 명시적으로 도트연산자 후에 findViewbyid를 사용해야한다.

ex) convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_dd,parent,false)//루트레이아웃이 아니므로 false


Textview textview = (Textview) convertView.findViewByid(R.id.txview1)


1. 스크롤뷰


화면 제약을 극복하기위한 스크롤을 지원하는 뷰로는 주로 

ScrollView ListView GridView가 있다.



<ScrollView>태그로 감싼 스크롤 뷰는 


오직 하나의 자식만을 가질 수 있다.


그러므로 리니어레이아웃 뷰를 보통 자식으로 둔다.


그러나 스크롤뷰는 한번에 모든 콘텐츠를 로드에 메모리 부족을 야기하므로


많은 정보를 담아야 할 떄는 리스트뷰와 그리드뷰를 사용해야한다.


리스트뷰와 그리드뷰는 AdapterView를 상속받은 뷰이다. 


어뎁터뷰는 동일한 형태 많은양의데이터를 표현할 때 유용하다.


어뎁터뷰의 구현은 3단계로 이루어진다.


1. 데이터준비


2. 데이터를  뷰에 연결할 어뎁터 구현


3. 뷰에 어텝터 붙임 .


xml파일에 리스트뷰를 넣고 


후에 main엑티비티에 코딩한다.


ArrayAdapter


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
       ArrayList<String> data = new ArrayList<>();

        for(int i=0;i<30;i++){
            data.add("data"+i); // ArrayList에 Stirng 데이터30개를 준비했다.

 
        }
 
 
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
//
String형 어뎁터를 준비했다.파라미터는 context,int(레이아웃 리소스id ) , List 등 세 가지 이다.
simple_list_item은 안드로이드에서 기본 제공해주는것으로 레이아웃당 Textview하나만 가리키는 id이다.
(id는 내부적으로 int형으로 저장된다.)

세번째에는 ArrayList객체인 data를 전달하였다.
 
       
 
        ListView listView =(ListView)findViewById(R.id.list_view); //뷰에 관한건 new안쓰고 findviewbyid
        listView.setAdapter(adapter); //리스트뷰의 셋어뎁터 메소드 이용 어뎁터 연결

// 리스트뷰와 어뎁터를 연결했다. 리스트뷰 객체를 생성하고 (findviewbyid이용) 이에 setAdapter메소드를 통해 인자로 adapter라는

// ArrayAdapter객체를 넘겨주었다.


 
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { //리스트뷰의 셋온클릭리스너열고 인자에 뉴 어뎁터뷰.온클릭리스너객체에 온클릭아이템 오버라이딩 해서 쓴다.
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this, position+"번쨰 아이템 선택", Toast.LENGTH_SHORT).show();
            }
/ // 온클릭리스너를통해 이벤트를 구현했다. 어뎁터뷰의 온 아이템 클릭리스터까지 치면 온 아이템 클릭 자동완성이 나온다.
// position은 클릭된 아이템의 위치 , id는 아이템의 고유 아이디이다. 데이터베이스를 미사용한다면 둘은 같게 이용한다.
//

        });
    }
}

cs








2.BaseAdapter  

작성중



반응형
Comments