안드로이드 스튜디오 리스트뷰 사용하기
Using the Android Studio ListView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</LinearLayout>
메인 레이아웃
MainLayout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp">
<ImageView
android:id="@+id/iamgeview"
android:layout_width="80dp"
android:layout_height="80dp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="10dp">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15dp"
android:textStyle="bold"
android:textColor="@android:color/black"
android:text="이름" />
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13dp"
android:textStyle="bold"
android:textColor="@android:color/black"
android:text="내용" />
</LinearLayout>
</LinearLayout>
메인 레인아웃의 ListView에 넣을 sub 레이아웃
Sub layout to be placed in ListView of main layout
// inner class _ Adapter class
class testAdapter extends BaseAdapter {
ArrayList<UserDTO> items = new ArrayList<UserDTO>();
// 데이터 추가 메소드 - add date method
public void addItem(UserDTO dto) {
items.add(dto);
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// ListView_Inflater 인스턴스 생성 - ListView_Inflater instance generate
ListView_Inflater view = new ListView_Inflater(getApplicationContext());
UserDTO dto = items.get(position);
view.setName(dto.getName());
view.setcontent(dto.getContent());
view.setImageView(dto.getResId());
return view;
}
}
데이터를 ListView에 뿌려주기 위한 Adapter을 생성한다.
여기서 extends는 BaseAdapter을 하도록 한다. 그리고 getCount, getItem, getItemId, getView를 오버라이딩을 한다.
뿌려주는 데이터는 한개가 아니라 여러개의 속성을 가질 수 있으므로 ArrayList를 통해 객체화를 한다.
Generate Adapter for data give to ListVIew
thr point is Extends in the BaseAdapter. and, overriding getCount, getItem, getItemId, getView
Data to show is not one but anymore so, generate ArrayList
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class ListView_Inflater extends LinearLayout {
// ID
private ImageView imageView;
private TextView user_Name;
private TextView user_Content;
// 생성자 - Constructor
public ListView_Inflater(Context context) {
super(context);
init(context);
}
// 생성자 - Constructor
public ListView_Inflater(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context) {
// 인플레이션을 하기 위한 인플레이터
// Inflater to do inflation
LayoutInflater inflater = (LayoutInflater) context.getSystemService
(context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.listview_item, this, true);
// catch ID
imageView = (ImageView) findViewById(R.id.iamgeview);
user_Name = (TextView) findViewById(R.id.name);
user_Content = (TextView) findViewById(R.id.content);
}
// add image method
public void setImageView(int resId) {
imageView.setImageResource(resId);
}
// add name method
public void setName(String name) {
user_Name.setText(name);
}
// add content method
public void setcontent(String content) {
user_Content.setText(content);
}
}
생성자 2개를 만든 후
sub 레이아웃을 메모리에 올리기 위해 인플레이터를 한다.
후에 sub 레이아웃의 위젯의 아이디를 통해 가지고 온다.
추가로 각각 set 메소드를 만든다
after make a two Constructor
Do the inflater for put sub layout in the memory
bring on Id of widget
in additional make a each set method
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ListView 아이디 : ListView Id
listView = (ListView)findViewById(R.id.listView);
// testAdapter 인스턴스 생성 : testAdapter Instance generate
testAdapter testAdapter = new testAdapter();
// ListView Set Adapter
listView.setAdapter(testAdapter);
//Test Data
testAdapter.addItem(new UserDTO("ㅋㅋㅋ", "행복해지고 싶다", R.drawable.protest1));
testAdapter.addItem(new UserDTO("덕써이", "아! 수여니!!", R.drawable.protest2));
testAdapter.addItem(new UserDTO("떠려니", "떠려떠련", R.drawable.protest3));
testAdapter.addItem(new UserDTO("마요미", "아우 때릴 뻔 했네", R.drawable.protest4));
testAdapter.addItem(new UserDTO("수원통닭", "세상에 이런맛은 없었다.", R.drawable.protest5));
}
메인 액티비티에서 ListView의 아이디를 가지고 온다.
위에서 만든 Adapter을 인스턴스화 한다.
ListView.setAdapter(adapter)을 통해 ListView에 아답터를 붙여 데이터가 붙게 한다.
아래 TestData는 5개를 테스트로 데이터를 넣어본것이다.
bring on Id of ListView in MainActivity
generate Adapter
ListView.setAdapter(adapter) allows the data attached by ListView attached adapter
TestData are testdata
'[# 2]…My DevelopStory' 카테고리의 다른 글
안드로이드 개인 세미 프로젝트(2) - 스터디 스탑워치 ~ Android personal SemiProject - Study StopWatch (0) | 2019.02.18 |
---|---|
안드로이드 개인 세미 프로젝트(1) - 스터디 스탑워치 ~ Android personal SemiProject - Study StopWatch (0) | 2019.02.17 |
스크롤뷰를 이용하여 스크롤 만들기 ~ Make a scroll Using ScrollView (0) | 2019.02.08 |
안드로이드 공부_인텐트를 활용한 화면전환 ~ switch a view using Intent (0) | 2019.02.02 |
안드로이드 공부 1회 ~ Android 1 time (0) | 2019.01.21 |