0
나는 스피너 두 개가 각각 텍스트보기와 ProgressBar를 포함하고 있습니다. 두 번째 Sprinner의 1rst 스피너에서 요소를 선택하면 ProgressBar가 표시되고 스피너가 채워진 후 스피너가 채워진 후 서버에 요청하여 일부 데이터를 가져 와서 스피너를 채워야합니다. progressBar는 사용할 수 없습니다. 두 번째 회 전자에서 1rst 회 전자에서 요소를 선택한 직후 ProgressBar가 표시되고 (요청 됨) 두 번째 회 전자에서 항목을 선택한 경우에만 ProgressBar가 숨겨집니다. 코드에서 무엇을 변경해야할지 모르겠다. 제발 도와주세요. 이 내 코드입니다 :스피너보기를 올바르게 업데이트하는 방법
회 전자 : 스피너와
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = mInflater.inflate(...);
TextView itemView = (TextView) row.findViewById(...);
mProgressBar = (ProgressBar) row.findViewById(...);
//mProgressBar.setVisibility(View.INVISIBLE);
T item = getItem(position);
String itemLabel = null;
itemLabel = mContext.getString(R.string.dialog_filters_item, item.getName());
}
itemView.setText(itemLabel);
return row;
}
@Override
public void setProgressBarVisibility(final boolean visibility) {
if (mProgressBar != null) {
if (visibility) {
mProgressBar.setVisibility(View.VISIBLE);
} else {
mProgressBar.setVisibility(View.INVISIBLE);
}
Log.v(TAG, "changed visibility on spinner " + visibility);
}
}
조각 :
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
.... //spinner1 && spniner2 methods run on UI Threads
spinner1SetProgressBarVisibility(true);
spinner2SetProgressBarVisibility(false); //request to server
mHost.populateSpinner1(); ....
return v;
}
private void populateSpinner1Spinner(List<Data> dataServerItems) {
Data dataAll = new Data();
dataAll.setDepName(...);
dataAll.setDepNumber(...);
mDataItems.clear();
mDataItems.add(dataAll);
if (dataServerItems != null) {
mDataItems.addAll(dataServerItems);
}
spinner1SetProgressBarVisibility(false);
spinner2SetProgressBarVisibility(false);
mSpinner1DataAdapter.notifyDataSetChanged();
}
private void populateSectionsSpinner(List<Data2> dataServerItems) {
Data2 dataAll = new Data2();
dataAll.setSectionName(getString(...));
dataAll.setSectionNumber(...);
mData2Items.clear();
mData2Items.add(0, dataAll);
if (dataServerItems != null) {
mSectionItems.addAll(dataServerItems);
spinner1SetProgressBarVisibility(false);
spinner2SetProgressBarVisibility(false);
mSpinner2DataAdapter.notifyDataSetChanged();
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.v(TAG, "onItemSelected, position=" + position);
switch (parent.getId()) {
case R.id.spinner1:
spinner1SetProgressBarVisibility(false);
mHost.getData2();
spinner2SetProgressBarVisibility(true);
break;
case R.id.spinner2:
...
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// Not used
}
@Override
public void onDataUpdate(List<Data> dataServerItems) {
populateSpinner1Spinner(List<Data> dataServerItems);
}
@Override
public void onData2Update(List<Data2> dataServerItems) {
populateSpinner2Spinner(List<Data> dataServerItems);
} private void spinner1SetProgressBarVisibility(final boolean isVisible) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mSpinner1DataAdapter.setProgressBarVisibility(isVisible);
}
});
}
private void spinner2SetProgressBarVisibility(final boolean isVisible) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mSpinner2DataAdapter.setProgressBarVisibility(isVisible);
}
});
} }