Формы списков

Макет формы списка

А как изменить макет самой «формы» отображающей список? Это просто, создайте новый макет, взяв за основу fba_include_simple_list_layout.xml и внесите необходимые изменения (добавьте новые элементы, измените стиль и т.п). Вот, например, добавлена панель кнопок внизу, макет doc_zakaz_list.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?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:divider="?android:dividerHorizontal"
    android:orientation="vertical"
    android:showDividers="middle" >
 
    <ViewStub
        android:id="@id/fba_stub_list_header"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inflatedId="@id/fba_list_header" />
 
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >
    </ListView>
 
    <LinearLayout
        android:id="@+id/buttonArea"
        style="?android:attr/buttonBarStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
 
        <Button
            android:id="@+id/btnOne"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Новый" />
 
        <Button
            android:id="@+id/btnTwo"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Кнопка 2" />
    </LinearLayout>
 
</LinearLayout>
<?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:divider="?android:dividerHorizontal"
    android:orientation="vertical"
    android:showDividers="middle" >

	<ViewStub
    	android:id="@id/fba_stub_list_header"
    	android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
    	android:inflatedId="@id/fba_list_header" />

	<ListView
    	android:id="@android:id/list"
    	android:layout_width="fill_parent"
    	android:layout_height="0dp"
    	android:layout_weight="1" >
	</ListView>

	<LinearLayout
    	android:id="@+id/buttonArea"
    	style="?android:attr/buttonBarStyle"
    	android:layout_width="match_parent"
    	android:layout_height="wrap_content" >

    	<Button
        	android:id="@+id/btnOne"
        	style="?android:attr/buttonBarButtonStyle"
        	android:layout_width="0dp"
        	android:layout_height="wrap_content"
        	android:layout_weight="1"
        	android:text="Новый" />

    	<Button
        	android:id="@+id/btnTwo"
        	style="?android:attr/buttonBarButtonStyle"
        	android:layout_width="0dp"
        	android:layout_height="wrap_content"
        	android:layout_weight="1"
        	android:text="Кнопка 2" />
	</LinearLayout>

</LinearLayout>

Установим его как макет нашей формы (Activity):

1
2
3
4
5
6
7
8
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 
    setContentView(R.layout.doc_zakaz_list);
    init();
 
}
@Override
protected void onCreate(Bundle savedInstanceState) {
   	super.onCreate(savedInstanceState);

   	setContentView(R.layout.doc_zakaz_list);
   	init();

}

Далее работа с этими элементами выполняется стандартно:

1
2
3
4
5
6
7
8
9
10
11
12
private void init() {
 
        Button btn = (Button) findViewById(R.id.btnOne);
        btn.setOnClickListener(new View.OnClickListener() {
 
                @Override
                public void onClick(View v) {
                        Toast.makeText(DocZakazListActivity.this, "Нажали на кнопку 1",
                                        Toast.LENGTH_SHORT).show();
                }
        });
}
private void init() {

    	Button btn = (Button) findViewById(R.id.btnOne);
    	btn.setOnClickListener(new View.OnClickListener() {

            	@Override
            	public void onClick(View v) {
            	    	Toast.makeText(DocZakazListActivity.this, "Нажали на кнопку 1",
                                    	Toast.LENGTH_SHORT).show();
            	}
    	});
}

И наконец, пример установки обработчиков выбора элементов в списке:

1
2
3
4
5
6
ListView list = getListView();
list.setOnItemClickListener(onDocItemClickListener);
list.setOnItemLongClickListener(onDocItemLongClickListener);
 
//DAO-менеджер (используется для удаления документа)
docDao = new DocumentZakazPokupatelyaDao(getConnectionSource());
ListView list = getListView();
list.setOnItemClickListener(onDocItemClickListener);
list.setOnItemLongClickListener(onDocItemLongClickListener);

//DAO-менеджер (используется для удаления документа)
docDao = new DocumentZakazPokupatelyaDao(getConnectionSource());
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*
 * Обработчик выбора элемента списка
 */
private OnItemClickListener onDocItemClickListener = new OnItemClickListener() {
 
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                        long id) {
 
                DocumentZakazPokupatelya doc = (DocumentZakazPokupatelya) getListAdapter()
                                .getItem(position);
                Log.i(TAG, "Выбран документ, ref = " + doc.getRef());
        }
};
 
/*
 * По долгому нажатию на элемент в списке – удаляем документ (без запроса)
 */
private OnItemLongClickListener onDocItemLongClickListener = new OnItemLongClickListener() {
 
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view,
                        int position, long id) {
                DocumentZakazPokupatelya doc = (DocumentZakazPokupatelya) getListAdapter()
                                .getItem(position);
                deleteDoc(doc);
                return true;
}
};
 
/*
 * Удалить документ, заново создать адаптер и установить его как источник
 * для списка
 */
private void deleteDoc(DocumentZakazPokupatelya doc) throws SQLException {
        docDao.delete(doc);
        setListAdapter(createAdaper());
}
/*
 * Обработчик выбора элемента списка
 */
private OnItemClickListener onDocItemClickListener = new OnItemClickListener() {

    	@Override
    	public void onItemClick(AdapterView<?> parent, View view, int position,
                    	long id) {

            	DocumentZakazPokupatelya doc = (DocumentZakazPokupatelya) getListAdapter()
                            	.getItem(position);
            	Log.i(TAG, "Выбран документ, ref = " + doc.getRef());
    	}
};

/*
 * По долгому нажатию на элемент в списке – удаляем документ (без запроса)
 */
private OnItemLongClickListener onDocItemLongClickListener = new OnItemLongClickListener() {

    	@Override
    	public boolean onItemLongClick(AdapterView<?> parent, View view,
                    	int position, long id) {
            	DocumentZakazPokupatelya doc = (DocumentZakazPokupatelya) getListAdapter()
                            	.getItem(position);
            	deleteDoc(doc);
    	    	return true;
}
};

/*
 * Удалить документ, заново создать адаптер и установить его как источник
 * для списка
 */
private void deleteDoc(DocumentZakazPokupatelya doc) throws SQLException {
    	docDao.delete(doc);
    	setListAdapter(createAdaper());
}

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

Похожие записи: