나는 ListView
의가 빈 상태 ID @android:id/empty
와 ViewStub
에 팽창 시릴 Mottier에 의해 작성 guide 유용하게 사용할 수 있습니다. 이 방법은 모두 좋지만, 을 통해 연결된 어댑터가없는 ListActivity
이 있거나 빈 어댑터가 연결된 경우 빈 화면이 나타납니다. 그것은 모든 분명하지만이 같은 논리를 실현하려면 :핸들 빈리스트와 AsyncTask를
- 열기를
ListActivity
- 는
adapter
- 이
AcyncTask
을 실행하고Adapter
에 대한 데이터를 얻을 이
- 전화는
- 대화 기각 notifyDataSetChanged 대화 진행률을 표시 부착
다음 1 ~ 3 단계는 비워 보입니다. 오류가있는 y보기 (예 : "찾을 수 없음"). 하지만 난 AsyncTask
실행 후 쇼 오류 싶어요. 실행하는 동안 AsyncTask
나는 단지 프로세스 대화 상자를 보여주고 싶습니다. 재생 사용 빈도 옵션을 @android:id/empty
으로 설정하려고 시도하면 xml
에 include
을 사용해보세요. 그러나이 논리를 깨닫지 못합니다. 어떤 제안이라도 감사 할 것입니다.
UPD 더 자세한 정보 I가 activity.xml
:
<FrameLayout
android:id="@id/gd_action_bar_content_view"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" >
<ListView
android:id="@android:id/list"
style="@style/listViewStyle"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:focusable="false" />
<ViewStub
android:id="@android:id/empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
layout="@layout/error" />
</FrameLayout>
error.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:padding="20dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerInside"
android:src="@drawable/ic_cheese" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:textStyle="bold"
android:textSize="16sp"
android:text="@string/no_cheese" />
</LinearLayout>
ListActivity 클래스 :
public class MyListActivity extends ListActivity implements OnScrollListener, OnItemClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity); //inflate activity with ViewStub
mAdapter = new MyAdapter(this, Collections.EMPTY_LIST);
setListAdapter(mAdapter);
new SearchAndFill().execute("");
}
}
그리고 비동기 클래스 : 활동이 만들고 activity.xml
을 팽창 할 때 내가 빈보기를 볼 실행 AsyncTask
동안
private class SearchAndFill extends AsyncTask<String, Void, List<Object>>{
LoadingDialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
if (dialog==null){
dialog = new LoadingDialog(MyListActivity.this);
dialog.setCancelable(false);
}
dialog.show();
}
@Override
protected List<Object> doInBackground(String... str) {
return search(str[0]); //this is HTTP GET request
}
@Override
protected void onPostExecute(List<Object> result) {
super.onPostExecute(result);
dialog.dismiss();
showResult(result); //this is fill adapter data and call notifyDataSetChanged
}
}
그것은, AsyncTask
을 실행 한 후 빈과 쇼입니다. 전화 onPostExecute
AsyncTask
의 경우 HTTP GET 요청 결과가 표시됩니다. activity.xml
을 생성하고 비정상적으로 실행했을 때 빈 상태로 표시되면 AsyncTask
을 실행하고 AsyncTask
을 실행하면 빈보기가 표시됩니다. 전화 onPostExecute
AsyncTask
의 경우 HTTP GET 요청 결과가 표시됩니다. 나는 그것이 틀렸다고 생각한다. AsyncTask가 실행되기 전에 빈 ListView를 표시하고 결과가 Collections.EMPTY_LIST와 같으면 이미지를 표시하고 싶습니다. (예 : 아무것도 찾지 못했습니다.)
귀하의 질문을 수정하고 아마도 몇 가지 코드를 추가하는 것을 고려하십시오.이해하기가 쉽지 않다는 것을 발견하는 메신저 –