웹페이지 읽어오기 : http://son10001.blogspot.kr/2016/05/android-studio_30.html
요 상태에서...
커스텀 뷰 레이아웃을 하나 만들자.
레이아웃 항목에서 "Layout resource File" 메뉴를 선택해 파일을 만든다.
(물론 이건 조금이라도 타이핑 할 내용을 줄이기 위해서 하는거라서, 그냥 직접 XML 레이아웃을 다 쳐 넣어도 된다.)
만들 레이아웃 파일명을 넣고 확인.
그럼 이렇게 레이아웃 파일이 생성된다.
커스텀 레이아웃에 쓸 아이콘 이미지를 몇개 추가 한다.
아이콘 이미지 :
완성된 레이아웃은 대충 이런 형태.
메인 타이틀, 서브 텍스트, 아이콘 이미지. 이렇게 3개의 항목이 하나의 셋인 리스트 뷰다.
<?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"> <ImageView android:layout_width="50dip" android:layout_height="50dip" android:id="@+id/imageView" android:src="@drawable/num01" android:layout_margin="5dip" /> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Title Text" android:id="@+id/textView" android:textSize="24dip" android:layout_marginLeft="5dip" android:layout_marginTop="5dip" android:layout_marginRight="5dip" android:layout_marginBottom="1dip" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Sub Text" android:id="@+id/textView2" android:textSize="16dip" android:layout_marginLeft="5dip" android:layout_marginTop="1dip" android:layout_marginRight="5dip" android:layout_marginBottom="5dip" /> </LinearLayout> </LinearLayout>
3개의 항목이 하나의 아이템으로 동작 할 것이므로, 클래스를 만들어 묶어 준다.
클래스를 추가하고.
이름을 적당하게 지정한다.
데이터 셋을 관리할 클래스이므로 이렇게 Getter / Setter 를 구현 해줌.
package com.son10001.formbasic; public class ListItem { int image; String title; String sub; public ListItem ( int inImage, String inTitle, String inSub){ this.image = inImage; this.title = inTitle; this.sub = inSub; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getSub() { return sub; } public void setSub(String sub) { this.sub = sub; } public int getImage() { return image; } public void setImage(int image) { this.image = image; } }
그 다음에는
어뎁터를 구현해 준다.
참고 : http://son10001.blogspot.kr/2016/05/android-studio-listview.html
이전에 만들었던 리스트 뷰와 같은 방식으로 만들면 되는데, 단지 getView 가 좀더 복잡하고 addItem 이 데이터 셋을 넘겨서 여러 아이템을 한꺼번에 적용하는게 다르다.
이렇게 어뎁터 까지 구현해 줬으면...
이젠 메인 액티비티에서 써 먹으면 된다.
package com.son10001.formbasic; import android.os.AsyncTask; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.ListView; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.URL; import java.util.ArrayList; public class BasicActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_basic); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); ListView listView = (ListView) findViewById(R.id.listView); MyAdapter adapter = new MyAdapter(this); listView.setAdapter(adapter); ArrayList<ListItem> items = new ArrayList<ListItem>(); items.add(new ListItem(R.drawable.num01, "Title 01", "Sub 01")); items.add(new ListItem(R.drawable.num02, "Title 02", "Sub 02")); items.add(new ListItem(R.drawable.num03, "Title 03", "Sub 03")); items.add(new ListItem(R.drawable.num04, "Title 04", "Sub 04")); adapter.addItem(items); // 클릭이벤트 findViewById(R.id.btnGetWeb).setOnClickListener(mClickListener); } Button.OnClickListener mClickListener = new View.OnClickListener() { public void onClick(View v) { try { new HttpUtil().execute(); } catch (Exception e) { e.printStackTrace(); } } }; private URL Url; private String strUrl,strCookie,result; public class HttpUtil extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { super.onPreExecute(); strUrl = "http://192.168.0.181:916/gettest.aspx"; } @Override protected Void doInBackground(Void... voids) { try{ Url = new URL(strUrl); HttpURLConnection conn = (HttpURLConnection) Url.openConnection(); conn.setRequestMethod("GET"); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); conn.setDefaultUseCaches(false); strCookie = conn.getHeaderField("Set-Cookie"); InputStream is = conn.getInputStream(); StringBuilder builder = new StringBuilder(); BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8")); String line; while ((line = reader.readLine()) != null) { builder.append(line+ "\n"); } result = builder.toString(); }catch(MalformedURLException | ProtocolException exception) { exception.printStackTrace(); }catch(IOException io){ io.printStackTrace(); } return null; } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); System.out.println(result); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_basic, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
이렇게 하고 앱을 실행 해 보면...
요렇게 이쁜 리스트 뷰가 생성된다.