<구현 화면>
1. 메인액티비티(cat/dog 선택화면)에서 두개의 리스트 생성
public class MainActivity extends AppCompatActivity {
static public ArrayList<list_item> DataList;
static public ArrayList<list_item> searchList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().hide();
mContext = this;
DataList = new ArrayList<list_item>();
searchList = new ArrayList<list_item>();
}
}
2. 위 리스트뷰를 사용할 java 클래스에 import
import static com.example.feedproject.MainActivity.DataList;
import static com.example.feedproject.MainActivity.searchList;
3. Api파싱 java 클래스 생성 (아래 링크 참고)
private static void parseData(String responseBody) {
String image, title, maker, brand, desc, category1, category2, category3, category4;
JSONObject jsonObject = null;
int i=0;
try {
jsonObject = new JSONObject(responseBody.toString());
JSONArray jsonArray = jsonObject.getJSONArray("items");
while (i != 10) {
JSONObject item = jsonArray.getJSONObject(i);
image = item.optString("image");
brand = item.optString("brand");
category1 = item.optString("category1");
category2 = item.optString("category2");
category3 = item.optString("category3");
category4 = item.optString("category4");
final String finalImage = image;
final String finalTitle = brand;
final String finalDesc = category1 + " > " + category2 + " > " + category3 + " > " + category4;
final Boolean[] check = {true};
Handler mHandler = new Handler(Looper.getMainLooper());
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
DataList.add(new list_item(finalImage, finalTitle, finalDesc));
searchList.add(new list_item(finalImage, finalTitle, finalDesc));
}
}, 0);
i++;
}
} catch (JSONException e) {
e.printStackTrace();
}
- 10개씩 리스트뷰에 쌓는 방식!!
- 네이버 api는 최대 100개까지 호출 가능 -> display=10으로 해놓고 리스트뷰에 계속 쌓아가는 방식으로 무한대 호출
- Handler를 감싸주지 않으면 오류
3. DogMainActivity.java
public void ListViewLoad() { // 페이지를 처음 갱신할 경우 실행
Log.d(TAG, "리스트뷰 뿌릴게요");
Handler mHandler = new Handler(Looper.getMainLooper());
mHandler.postDelayed(new Runnable() {
public void run(){
adapter = new ListViewAdapter(mContext, DataList);
listview.setAdapter(adapter);
}
},0);
Log.d(TAG, "리스트뷰 뿌렸어요");
listViewClick();
listViewScroll();
}
public void ListViewUpdate() // 페이지가 1 이상일 경우 실행
{
listViewClick();
listViewScroll();
adapter.notifyDataSetChanged();
}
- Handler를 감싸주지 않으면 오류
4. 10개씩 호출한 API를 리스트뷰에 호출하면서 스크롤 기능하기
- DogMainActivity.java
public void listViewScroll() {
ApiExamSearchShop.start += 10;
listview.setOnScrollListener(new AbsListView.OnScrollListener(){
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE && lastItemVisibleFlag && !mLockListView) {
progressBar.setVisibility(View.VISIBLE);
mLockListView = true;
page++;
try {
Thread td = new Thread() {
public void run() {
ApiExamSearchShop api = new ApiExamSearchShop();
api.main(page, keyword);
}
};
td.start();
} catch (Exception e) {
e.printStackTrace();
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
progressBar.setVisibility(View.GONE);
mLockListView = false;
}
},1000);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
lastItemVisibleFlag = (totalItemCount > 0) && (firstVisibleItem + visibleItemCount >= totalItemCount);
}
});
}
- activity_dog_main.xml
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:indeterminateTint="@color/colorAccent" />
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/progressbar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
'Android > 튜토리얼 및 가이드' 카테고리의 다른 글
[Android/SDK연동]SNS 로그인 구현(4) - 페이스북 (0) | 2021.05.12 |
---|---|
[Android/SDK연동]SNS 로그인 구현(2) - 카카오톡 sdk v1 (0) | 2021.05.11 |
[Android/SDK연동]SNS 로그인 구현(1) - 네이버 (0) | 2021.05.10 |
[Android/API]MS-SQL DB를 안드로이드 스튜디오와 연결하기 (0) | 2021.05.08 |
[Android/API]네이버 쇼핑 API 파싱 (1) XML (0) | 2021.02.03 |