텍스트 대신에 레이아웃형태를 리스트뷰 시키는 방법임.
이전 리스트뷰 코드와 많이 겹쳤기때문에 이어서 사용했슴.
(※ 이전 리스트뷰 주소 참고 - https://asterisco.tistory.com/44)
00. res밑에 layout 마우스오른쪽버튼 클릭 - New - resource Files 클릭
01. 이름을 지어주고 OK버튼 클릭. (fruits_item.xml이라고 지어줬다.)
02. 코드를 입력하고 아래쪽에 디자인 텝을 눌러 디자인을 확인해보자.
<?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="wrap_content">
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@mipmap/ic_launcher" />
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical">
<TextView
android:id="@+id/nameTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30dp"
android:textColor="#ff000000"/>
<TextView
android:id="@+id/ageTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="25dp"
android:textColor="#ff0000ff"/>
</LinearLayout>
</LinearLayout>
03. 저런식으로 들어가게된다. 실제 이미지 옆에 마우스를 가져다놓으면 리스트뷰의 위치를 확인 할 수 있다.
04. 메인자바Script위에서 마우스오른쪽버튼클릭 - New - JavaClass 클릭
05. 방금만든 xml파일과 연결시켜주기위해 이름을 비슷하게 지어주고 OK버튼 클릭.
06. class FruitsItemView extends LinearLayout {}라고 치고 Alt+Enter 를 쳐서 기본 constructure를 불러오자.
07. 연결시켜주기 위해서 fruits_item.xml의 텍스트뷰에 아이디를 입력하자.
08. FruitsItemView Script에 다음과 같이 코드를 입력하자.
package com.example.joey.mylistview;
import ...
class FruitsItemView extends LinearLayout {
TextView nameTextView;
TextView ageTextView;
public FruitsItemView(Context context) {
super(context);
init(context);
}
public FruitsItemView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.fruits_item, this, true);
nameTextView = (TextView) findViewById(R.id.nameTextView);
ageTextView = (TextView) findViewById(R.id.ageTextView);
}
public void setName(String name){
nameTextView.setText(name);
}
public void setAge(String age){
ageTextView.setText(age);
}
}
09. 메인Script로 와서 로딩해주자.
package com.example.joey.mylistview;
import ...
public class MainActivity extends AppCompatActivity {
ListView listView;
FruitsAdapter fruitsAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
fruitsAdapter = new FruitsAdapter();
listView.setAdapter(fruitsAdapter);
}
class FruitsAdapter extends BaseAdapter {
String[] names = {"사과", "바나나", "딸기", "메론", "오렌지"};
String[] ages = {"21", "23", "25", "68", "10"};
@Override
public int getCount() {
return names.length;
}
@Override
public Object getItem(int position) {
return names[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
FruitsItemView view = new FruitsItemView(getApplicationContext());
view.setName(names[position]);
view.setAge(ages[position]);
return view;
}
}
}
10. 실행시켜보자.
11. 정상적으로 작동되었음을 확인 할 수 있다.