[ListView #4] 사용자 Layout을 이용한 List
반응형
이전에는
mListAdapter = new LoadListAdapter(this,
R.layout.repeat_menu_load_list_row, mArrayData);
//Layout에 추가된 TextView들을 가져와 String을 적용한다.
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(this, android.R.layout.simple_list_item_1, mArrayList);
제공되는 기본 List형으로 했으나 이번에는 사용자가 만든 Layout을 이용하여,
리스트를 만들어보자.
리스트 하나에 두개의 줄로 이루어져 있는 리스트를 만들어보자.
[리스트의 하나에 두줄을 넣고 첫번째줄은 큰글씨, 두번째 줄은 작은 글씨로 이루어져있는 리스트임]
----------------------------------------------------------------------
1. Activity를 구성하는 Layout 을 만든다
이때 ListView가 포함되어 있어야 된다. [지금은 여러가지 하면 보기 힘드니 ListView만
추가된 것으로 만듬.]
repeat_menu_load_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical">
<ListView
android:id="@+id/repeatMenuLoadLV"
android:layout_width="fill_parent"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
----------------------------------------------------------------------
2. 위 layout에서 ListView에 적용할 List 형태의 Layout을 추가한다.
즉 리스트 하나에 대한 형태를 구성하는 것이다.
[큰 글씨 라인 하나와 작은 글씨 라인 하나가 있는 구성이 된다.]
repeat_menu_load_list_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:paddingLeft="16dip"
android:paddingRight="?android:attr/scrollbarSize">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="6dip"
android:layout_marginTop="6dip"
android:layout_marginBottom="6dip"
android:layout_weight="1">
<TextView android:id="@+id/repeatMenuLoadListTag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView android:id="@+id/repeatMenuLoadListFilename"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/repeatMenuLoadListTag"
android:layout_alignLeft="@id/repeatMenuLoadListTag"
android:textAppearance="?android:attr/textAppearanceSmall"
android:maxLines="2" />
</RelativeLayout>
</LinearLayout>
----------------------------------------------------------------------
3. 이제 Activity에 적용한다.
[ListActivity를 사용해도 되지만 지금은 Activity를 상속 받은 것으로 진행]
public class RepeatMenuLoadList extends Activity {
private static final String Tag = "RepeatMenuLoadList";
private ListView mListView;
private LoadListAdapter mListAdapter;
private ArrayList <PlayerRepeatABInfo> mArrayData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.repeat_menu_load_list);
mArrayData = new ArrayList<PlayerRepeatABInfo>();
mListView = (ListView)findViewById(R.id.repeatMenuLoadLV);
//user의 list layout을 적용할 Adapter 생성하면서,
//사용할 Layout, ArrayList 데이타를 전달한다.
//사용할 Layout, ArrayList 데이타를 전달한다.
mListAdapter = new LoadListAdapter(this,
R.layout.repeat_menu_load_list_row, mArrayData);
mListView.setAdapter(mListAdapter);
}
...............
@Override
//리스트 나오는 것을 임시로 보기 위해서 ArrayList의 Data를 세팅한다.
protected void onResume() {
super.onResume();
//For Testing
{
PlayerRepeatABInfo a = new PlayerRepeatABInfo("TestPath/asdfasd/Tag_A", 12345);
a.setTagOfUser("Tag ~~!!!!!A");
mArrayData.add(a);
//변경된 데이타가 있다는 것을 Adapter에 알린다.
mListAdapter.notifyDataSetChanged();
}
}
mListAdapter.notifyDataSetChanged();
}
}
----------------------------------------------------------------------
4. List 하나에 적용되는 layout에 대한 Class를 구성한다.
3번에 나오는 Class 내부에 Sub Class로 만들어도 되며, Class 파일을 새로 만들어도 된다.
다만, 이 Class는 ArrayAdapter<E> 을 상속 받아야 된다.
public class LoadListAdapter extends ArrayAdapter<PlayerRepeatABInfo>{
private int mnRid;
//생성자를 구성할 때 ArrayList 데이타를 super에 매핑시켜야 된다.
//이것을 제외하고 2개의 인자만 받아서 생성자를 구성하고 super에
//넘겨주면, 리스트가 안나오게된다. 한참 삽질하게 되는 수가 있다.
//이것을 제외하고 2개의 인자만 받아서 생성자를 구성하고 super에
//넘겨주면, 리스트가 안나오게된다. 한참 삽질하게 되는 수가 있다.
public LoadListAdapter(Context context, int textViewResourceId,
List<PlayerRepeatABInfo> objects) {
super(context, textViewResourceId, objects);
mnRid =textViewResourceId;
}
@Override
//리스트를 그리면서 자동으로 호출되는 메서드임.
//여기에서 List의 내용을 채우면 된다.
public View getView(int position, View convertView, ViewGroup parent) {
View listView = convertView;
PlayerRepeatABInfo repeatData = getItem(position);
if (listView == null) {
LayoutInflater vi = (LayoutInflater)mContext.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
listView = vi.inflate(R.layout.repeat_menu_load_list_row, null);
}
//리스트에 적용할 데이타를 가져온다.
String sTag = repeatData.getTagOfUser();
String sFilename = repeatData.getFilePath();
//Layout에 추가된 TextView들을 가져와 String을 적용한다.
TextView tvTag = (TextView)listView.findViewById
(R.id.repeatMenuLoadListTag);
(R.id.repeatMenuLoadListTag);
TextView tvFilename = (TextView)listView.findViewById
(R.id.repeatMenuLoadListFilename);
tvTag.setText(sTag);
tvFilename.setText(sFilename);
return listView;
}
위 4단계만을 해주면, 리스트 구성하는데 크게 무리가 없을 듯합니다.
굵은 글씨와 색칠된 것들을 잘 적용하면 됩니다.
-----------------------------------------------------------------------
PlayerRepeatABInfo 은 그냥..데이타를 저장하고 읽어 올 수 있게 만든 객체입니다.
혹시 이것의 내용을 보고 싶으신분 들을 위해서 대략 내용을 추가해 드리겠습니다.
public class PlayerRepeatABInfo
{
private static final String Tag = "PlayerRepeatABInfo";
private long mTotalTime;
private long mStartPosition;
private long mEndPosition;
private String mFilePath;
private byte mIsSetRepeatInfo;
private String mTagOfUser;
public PlayerRepeatABInfo(String fullPath, long totalTime) {
mFilePath = fullPath;
mIsSetRepeatInfo = 0;
mTotalTime = totalTime;
mStartPosition = 0;
mEndPosition = 0;
mTagOfUser = null;
}
.........
public void setTagOfUser(String sTag){
mTagOfUser = sTag;
}
public String getTagOfUser(){
return mTagOfUser;
}
..............
--------------------------------------------
완성된 이미지를 보여드리고 싶지만, 파일을 올릴수 있는 상황이 아니라서 ....ㅜㅜ
반응형
'IT > Android[안드로이드]' 카테고리의 다른 글
[Intent #1] Activity에 기본 데이타 전달하기 (0) | 2010.12.01 |
---|---|
[Intent #2] Activity간 정보 전달 [Parcelable] (0) | 2010.12.01 |
[ListView #3] ListActivity상속 받아 ListView 보이기 (0) | 2010.11.25 |
[ListView #2] String.xml Array 변수로 리스트 보여주기. (0) | 2010.11.25 |
[ListView #1] ListView하나만 보여주기. (0) | 2010.11.25 |