2010-11-24 18 views
84

Я разрабатываю приложение. В моем приложении я использую Listview для отображения данных с использованием синтаксического анализа dom, я хочу, чтобы нижний колонтитул в списке, когда я нажимаю нижний колонтитул, дополнительные данные добавляют в список, я прикреплял изображение, мне хотелось бы, чтобы дизайн и процесс, пожалуйста, обратитесь image1 и imgae2.I упомянуть колонтитула в красном прямоугольникеКак добавить нижний колонтитул в ListView?

fig1-Footer, как "Больше новостей"
alt text

alt text

fig2-Добавить дополнительные 10 запись добавлена ​​в listview

ответ

199

Создание макета вид колонтитула, состоящий из текста, который вы хотите установить в качестве нижнего колонтитула, а затем попытаться

View footerView = ((LayoutInflater) ActivityContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_layout, null, false); 
ListView.addFooterView(footerView); 

Разметка для колонтитула может быть что-то вроде этого:

<?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:paddingTop="7dip" 
    android:paddingBottom="7dip" 
    android:orientation="horizontal" 
    android:gravity="center"> 

    <LinearLayout 
     android:id="@+id/footer_layout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:gravity="center" 
     android:layout_gravity="center"> 

    <TextView 
     android:text="@string/footer_text_1" 
     android:id="@+id/footer_1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="14dip" 
     android:textStyle="bold" 
     android:layout_marginRight="5dip" /> 
    </LinearLayout> 
</LinearLayout> 

Класс активности может быть :

public class MyListActivty extends ListActivity { 
    private Context context = null; 
    private ListView list = null; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     list = (ListView)findViewById(android.R.id.list); 

     //code to set adapter to populate list 
     View footerView = ((LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_layout, null, false); 
     list.addFooterView(footerView); 
    } 
} 
+6

Это хорошо, но что, если вы хотите, чтобы колонтитулы фиксироваться на экране, а не только видны при прокрутке на дно? И что, если вы хотите, чтобы нижний колонтитул был видимым, даже когда список ПУСТОЙ? См. Полный вопрос о http://stackoverflow.com/questions/12353701/fixed-and-always-visible-footer-below-listfragment. – gcl1 2012-09-10 14:30:07

9

Я знаю, что это очень старый вопрос, но я отправился туда по пути и нашел ответ pr ovided не на 100%, потому что, как упоминал gcl1 - таким образом нижний колонтитул на самом деле не является нижним колонтитулом экрана - это просто «дополнение» к списку.

Нижняя линия - для тех, кто может Google свой путь здесь - я нашел следующее предложение здесь: Fixed and always visible footer below ListFragment

Попробуйте сделать следующее, где акцент делается на кнопку (или любого колонтитула элемента) первым в списке XML - и тогда список добавляется как «layout_above»:

<RelativeLayout> 

<Button android:id="@+id/footer" android:layout_alignParentBottom="true"/> 
<ListView android:id="@android:id/list" **android:layout_above**="@id/footer"> <!-- the list --> 

</RelativeLayout> 
2

деятельность, в которой вы хотите добавить ListView колонтитула и я также генерировать событие на ListView колонтитула мыши.

public class MainActivity extends Activity 
{ 

     @Override 
     protected void onCreate(Bundle savedInstanceState) 
     { 

      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      ListView list_of_f = (ListView) findViewById(R.id.list_of_f); 

      LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      View view = inflater.inflate(R.layout.web_view, null); // i have open a webview on the listview footer 

      RelativeLayout layoutFooter = (RelativeLayout) view.findViewById(R.id.layoutFooter); 

      list_of_f.addFooterView(view); 

     } 

} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/bg" > 

    <ImageView 
     android:id="@+id/dept_nav" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/dept_nav" /> 

    <ListView 
     android:id="@+id/list_of_f" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/dept_nav" 
     android:layout_margin="5dp" 
     android:layout_marginTop="10dp" 
     android:divider="@null" 
     android:dividerHeight="0dp" 
     android:listSelector="@android:color/transparent" > 
    </ListView> 

</RelativeLayout> 
5

Если ListView является потомком ListActivity:

getListView().addFooterView(
    getLayoutInflater().inflate(R.layout.footer_view, null) 
); 

(в OnCreate())

8

Ответы здесь немного устарела , Хотя код остается неизменным, некоторые изменения в поведении.

public class MyListActivity extends ListActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     TextView footerView = (TextView) ((LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_view, null, false); 
     getListView().addFooterView(footerView); 
     setListAdapter(new ArrayAdapter<String>(this, getResources().getStringArray(R.array.news))); 
    } 
} 

Информация о addFooterView() метод

Добавить фиксированный вид появляться в нижней части списка. Если addFooterView() вызывается более одного раза, представления отображаются в том порядке, в котором они были добавлены. Представления, добавленные с помощью этого вызова, могут сфокусироваться, если они захотят.

Большинство из перечисленных выше напряжений очень важный момент - ответы

addFooterView() должны быть вызваны перед вызовом setAdapter() .Это так ListView может обернуть прилагаемое курсор с одним, который также будет приходиться видом верхнего и нижнего колонтитула ,

Из Китката это изменилось.

Примечание: при первом вводе этот метод можно вызвать только до установки адаптера с помощью setAdapter (ListAdapter). Начиная с KITKAT, этот метод можно вызвать в любое время. Если адаптер ListView не расширяет HeaderViewListAdapter, он будет завернут поддерживающим экземпляром WrapperListAdapter.

Documentation

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