ListView с TextView и EditText в строке - PullRequest
2 голосов
/ 02 января 2012

Я должен прийти к вам за помощью в выполнении определенного действия в моем приложении для Android.Я хотел бы иметь список описаний предметов с textfield рядом с ним.Это textfield используется для ввода количества.

Я думаю об этом, используя просмотр списка с пользовательским макетом строки, но мне интересно, действительно ли это правильный путь.

Я буду заполнять список из кода, поскольку эти элементы извлекаются из веб-службы.

Так, каков наилучший способ сделать это?Использовать просмотр списка или другой просмотр?Могу ли я написать в свой объект домена после того, как редактирование текста редактирования было закончено?

Ответы [ 2 ]

3 голосов
/ 02 января 2012

То, о чем вы говорите, - это создать ListView с фокусируемым EditText внутри него.

Для того же вам нужно создать собственный адаптер для просмотра списка, создать необработанный макет с одним EditText и надуть его длякаждую строку путем создания класса адаптера.

Подробный пример приведен здесь: Редактируемый текст Android с возможностью фокусировки внутри ListView

2 голосов
/ 24 января 2012

Это пример того, что я сделал для моего текущего проекта.

//java for my class 
import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class editpage extends ListActivity {
    int editCount;
    private dbadapter mydbhelper;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.edit_list);
        mydbhelper = new dbadapter(this);
        mydbhelper.open();
        fillData();
    }



    private void fillData() {


        Cursor e = mydbhelper.getUserWord();
            startManagingCursor(e);

     // Create an array to specify the fields we want to display in the list (TITLE,DATE,NUMBER)
        String[] from = new String[] {dbadapter.KEY_USERWORD,};

        // an array of the views that we want to bind those fields to (in this case text1,text2,text3)
        int[] to = new int[] {R.id.textType,};

        // Now create a simple cursor adapter and set it to display
       SimpleCursorAdapter editadapter = 
       new SimpleCursorAdapter(this, R.layout.edit_row, e, from, to);
       ListView list = getListView();
       View footer = getLayoutInflater().inflate(R.layout.footer_layout, list, false);
       list.addFooterView(footer);
       setListAdapter(editadapter);
       editCount = e.getCount();
        }

        public void onClick(View footer){
            final MediaPlayer editClickSound = MediaPlayer.create(this, R.raw.button50);
                editClickSound.start();
                    };


@Override
protected void onListItemClick(ListView list, View v, int position, long id)
{
    super.onListItemClick(list, v, position, id);
    //final Intent intent = new Intent(this, title.class);
    //startActivityForResult(intent, position);
    }

Затем для моего курсора обратите внимание, что у меня есть несколько операторов where.Я делаю это, потому что у меня есть многоуровневый просмотр списка.категории -> источник -> заголовок -> пользовательское слово.

    // retrieves all the descriptions for the edittext fields
      public  Cursor getUserWord() 
        {
            return myDataBase.query(USER_WORD_TABLE, new String[] {
                    KEY_ID, 
                    KEY_CATEGORY,
                    KEY_SOURCE, KEY_TITLE, KEY_EDITWORD, KEY_USERWORD 
                    }, 
                    KEY_CATEGORY+ "=" + categories.categoryClick + " AND " + KEY_SOURCE+ "=" 
                    +source.sourceClick + " AND " + KEY_TITLE+ "=" + title.titleClick, 
                    null, null, null, KEY_ID);

        }

Наконец, у меня есть мой xml для отображения этого.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content">

    <ListView android:id="@+id/android:list"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="0.8"/>

</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" android:layout_gravity="left">

    <TextView
        android:id="@+id/textType"
        android:layout_width="150dip"
        android:layout_height="fill_parent"
        android:textSize="10dip"
        android:gravity="center|center_vertical"
        android:height="30dip"
        android:text="spaceholder" 
        android:layout_gravity="center_vertical" 
        android:layout_margin="2dp"/>

    <EditText
        android:id="@+id/editText"
        android:layout_width="160dip"
        android:layout_height="30dip"
        android:layout_gravity="left"
        android:gravity="left"
        android:textSize="10dip"
        android:height="25dip">
        </EditText>

</LinearLayout>


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
        <Button
        android:id="@+id/confirminedit"
        android:layout_weight="0.2"
        android:layout_width="wrap_content"
        android:layout_height="0dip"
        android:text="@string/confirmbutton"
        android:onClick="onClick"
        android:layout_alignParentBottom="true" />

</LinearLayout>

Последний XML для нижнего колонтитула с кнопкой подтверждения.Поэтому после того, как пользователь заполнит текст редактирования, он возьмет данные и сохранит их для следующего использования.Эта функция - то, над чем я сейчас работаю, но этот код должен дать вам хорошее представление о том, о чем вы спрашивали.

...