2016-08-22 2 views
1

Я потратил час, пытаясь добавить «Load More» Button и неопределенный ProgressBar в нижний колонтитул моего ListView.ListView с дополнительной загрузкой и кругом ProgressBar

Воображаемый scinario работает так:

Когда кнопка нажата, ProgressBar показан в то время как AsyncTask загружает 20 пунктов. когда предметы вставлены в ListView, ProgressBar увольняется, а Button снова появляется в нижнем колонтитуле. я пришел к следующему решению, и было бы хорошо, если у вас есть лучшее решение:

макет/progress_bar.xml

<?xml version="1.0" encoding="utf-8"?> 
<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/load_progress" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:indeterminate="true" 
    /> 

И если у вас есть следующие поля деятельности:

private ListView listview; 
private Button loadMoreButton; 
private ProgressBar progressBar; 

после подготовки вашего списка просмотра добавить нижний колонтитул, подобный этому, (в конце activity.onCreate()):

loadMoreButton = new Button(this); 
    loadMoreButton.setText("Load More"); 
    progressBar = (ProgressBar) LayoutInflater.from(this).inflate(R.layout.progress_bar, null); 

    loadMoreButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //downloadItems(); 
      listview.removeFooterView(loadMoreButton); 
      listview.addFooterView(progressBar); 

     } 
    }); 

Когда данные готовы (первая страница или последующие страницы), вызовите следующее после обновления адаптера.

 //adapter.notifyDataSetChanged(); 
    listview.removeFooterView(progressBar); 
    listview.addFooterView(loadMoreButton); 

Если у вас есть лучшие решения, просьба поделиться им в ответах.

+0

Вместо того чтобы показывать кнопку, чтобы загрузить больше вы можете проверить погоду пользователя ScrollStateChange находится в нижней части или нет, если найден последнего индекс элемента, то вы можете показать прогресс в сноске и при загрузке полного вывода его и показать свои данные –

+0

Я хочу, чтобы пользователь нажимал ** Load More **, чтобы уменьшить количество вызовов на сервер, если он все время прокручивается. –

ответ

0

Я пришел к решению без добавления/удаления нижнего колонтитула. Просто поставьте два вида (Load More Button и ProgressBar) в LinearLayout. Добавьте linearlayout как нижний колонтитул listview только в первый раз. Затем измените между кнопкой и progressbar, изменив свойство видимости.

Вот обновленный код:

макет/list_footer.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
<Button 
    android:id="@+id/load_more_button" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:visibility="gone" 
    android:text="Load More"/> 

<ProgressBar android:id="@+id/load_progress" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:visibility="gone" 
     android:indeterminate="true" /> 
</LinearLayout> 

называют этот метод в конце Activity.onCreate(), чтобы добавить колонтитул и обрабатывать кнопку мыши (загрузить данные, скрыть и показать ход).

private void prepareListFooter() { 

    View view = (View) LayoutInflater.from(this).inflate(R.layout.list_footer, null); 


    loadMoreButton = (Button) view.findViewById(R.id.load_more_button); 
    progressBar = (ProgressBar) view.findViewById(R.id.load_progress); 
    listview.addFooterView(view); 
    loadMoreButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //downloadMore(); 
      loadMoreButton.setVisibility(View.GONE); 
      progressBar.setVisibility(View.VISIBLE); 
     } 
    }); 
} 

также этот код после изменения адаптера, чтобы показать кнопку и скрыть прогресс.

adapter.notifyDataSetChanged(); 
loadMoreButton.setVisibility(View.VISIBLE); 
progressBar.setVisibility(View.GONE); 
0

Вместо того, чтобы удалять и добавлять представление в виде нижнего колонтитула .. вы можете иметь как кнопку, так и панель прогресса в одном и том же нижнем колонтитуле и делать видимость ВИДИМОЙ и видимость GONE в соответствии с требованием.

+0

Я попытался использовать 'View.setVisiblity (View.GONE)'. Но поскольку я добавил два нижних колонтитула Button и нижний колонтитул ProgressBar в listview, listview сохраняет пространство каждого нижнего колонтитула, даже если представление GONE. Когда вид GONE, его пространство остается над или под видимым видом. –

Смежные вопросы