Показывать загрузчик на Spinner (Dropdown) при получении данных из веб-сервиса - PullRequest
0 голосов
/ 24 мая 2018

Given in image link What i want in spinner

На изображении выше я показал, что когда пользователь касается выпадающего счетчика, он вызывает веб-API для получения данных для счетчика.Затем, в этот момент, я хочу показать загрузчик только на виде счетчика слева или справа где-то на самом виде, как на изображении, а не на всем экране, когда он динамически получает данные из веб-службы, и скрыть этот прогресс.позже, когда веб-сервис полностью ударится в конце (игнорируйте эту строку поиска на изображении).

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

This is image of spinner i.e showing loader

В этом я показываю загрузчик на кнопке запуска и скрываю загрузчик при нажатии кнопки остановки, чтобы вы могли использовать в соответствии с вашими потребностями. Так что для этого у меня естьсделал три класса CustomSpinner, Spinner_Custom_adapter и класс Activity для его использования

В основном файле макета

 <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:orientation="vertical">

    <www.your_packagename.com.spinnerwithloaderex.CustomSpinner
        android:id="@+id/custm_spnr"
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:layout_centerInParent="true"
        android:layout_gravity="center"
        android:background="@drawable/dropdown_create_sales"
        android:paddingRight="15dp"
        android:text="Hello World!" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp">

        <Button
            android:id="@+id/start_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Start" />

        <Button
            android:id="@+id/stop_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Stop" />

    </LinearLayout>
</LinearLayout>

CustomSpinner class

public class CustomSpinner extends android.support.v7.widget.AppCompatSpinner {
private Spinner_Custom_adapter spinner_custom_adapter;

public CustomSpinner(Context context) {
    super(context);
}

public CustomSpinner(Context context, int mode) {
    super(context, mode);
}

public CustomSpinner(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public CustomSpinner(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

public CustomSpinner(Context context, AttributeSet attrs, int defStyleAttr, int mode) {
    super(context, attrs, defStyleAttr, mode);
}

public CustomSpinner(Context context, AttributeSet attrs, int defStyleAttr, int mode, Resources.Theme popupTheme) {
    super(context, attrs, defStyleAttr, mode, popupTheme);
}

public void setItems(Activity activity, ArrayList<String> spnr_Arr) {
    spinner_custom_adapter = new Spinner_Custom_adapter(activity, spnr_Arr);
    setAdapter(spinner_custom_adapter);
}

public Spinner_Custom_adapter getSpinner_custom_adapter() {
    return spinner_custom_adapter;
}

public void showLoader() {
    setEnabled(false);
    spinner_custom_adapter.showLoader(true, true);
}

public void dismissLoader() {
    setEnabled(true);
    spinner_custom_adapter.showLoader(false, true);
}

}

Custom_Adapterкласс

public class Spinner_Custom_adapter<T> extends ArrayAdapter<T> {

private LayoutInflater flater;
private ProgressBar spinner_progress;
private TextView txtTitle;
private Boolean showOrNot = false;

Spinner_Custom_adapter(Activity context, ArrayList<T> list) {
    super(context, R.layout.loader_spinner_lt, R.id.title, list);
    flater = context.getLayoutInflater();
}

@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = flater.inflate(R.layout.loader_spinner_lt, parent, false);
    }
    Object object = getItem(position);
    String rowItem = null;
    if (object instanceof String) {
        rowItem = (String) object;
    }

    TextView txtTitle = (TextView) convertView.findViewById(R.id.title);
    txtTitle.setText(rowItem);
    ProgressBar spinner_progress = (ProgressBar) convertView.findViewById(R.id.spinner_progress);
    this.txtTitle = txtTitle;
    this.spinner_progress = spinner_progress;
    showLoader(showOrNot, false);
    return convertView;
}

void showLoader(Boolean showOrNot, boolean notifyListOrNot) {
    if (txtTitle != null && spinner_progress != null) {
        this.showOrNot = showOrNot;

        spinner_progress.setVisibility(showOrNot ? View.VISIBLE : View.GONE);
        if (notifyListOrNot) {
            notifyDataSetChanged();
        }
    }
}

}

Spinner макет одного представления xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_vertical"
    android:gravity="center_vertical"
    android:orientation="horizontal">

    <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/title"
        style="?android:attr/spinnerDropDownItemStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@+id/spinner_progress"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="Strawberry"
        android:textColor="#CC0033"
        android:textSize="16dp" />

    <ProgressBar
        android:id="@+id/spinner_progress"
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:visibility="gone" />

</RelativeLayout>

и его использование

       custm_spnr = (CustomSpinner) findViewById(R.id.custm_spnr);
    ArrayList<String> items = new ArrayList<>();
    items.add("Abcdefg");
    items.add("hijklm");
    items.add("nopqr");
    items.add("stu");
    items.add("vwxyza1b1c1");
    items.add("d1e1f11g1h1");
    custm_spnr.setItems(MainActivity.this, items);

    findViewById(R.id.start_btn).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            custm_spnr.showLoader();
        }
    });

    findViewById(R.id.stop_btn).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            custm_spnr.dismissLoader();
        }
    });
0 голосов
/ 24 мая 2018

Просто создайте специальный адаптер для вашего счетчика.Следуйте инструкциям, найденным здесь Как создать Spinner-список с помощью CustomAdapter в Android .Поместите представление загрузки в макет, накачанный в методе getView в адаптере, и управляйте им посредством обратного вызова из асинхронной задачи, используемой для получения результата.

...