【问题标题】:Listview with TextView and EditText per line每行带有 TextView 和 EditText 的 Listview
【发布时间】:2012-01-02 09:10:29
【问题描述】:

我必须就我的 android 应用程序中的特定活动向您寻求帮助。我想要一个项目描述列表,旁边有一个textfield。这个textfield是用来输入数量的。

我正在考虑通过使用带有自定义行布局的列表视图来做到这一点,但我想知道这是否是正确的方法。

我将从代码中填写列表,因为这些项目是从网络服务中获取的。

那么最好的方法是什么?使用列表视图还是使用不同的视图?编辑文本编辑完成后,我可以写入我的域对象吗?

【问题讨论】:

    标签: java android listview textview android-edittext


    【解决方案1】:

    您所说的方式是创建 ListView,其中包含可聚焦的 EditText。

    同样,您需要为列表视图创建一个自定义适配器,使用一个 EditText 创建一个原始布局,并通过创建一个适配器类为每一行充气。

    详细示例在这里:Android Focusable EditText inside ListView

    【讨论】:

    • 这就是我的想法,但这是最佳做法吗?到目前为止,我还没有在 android 上看到过类似的东西。
    • @BartVanRemortele 这取决于你的要求是什么。
    【解决方案2】:

    这是我为当前项目所做的示例。

    //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 用于带有确认按钮的页脚。因此,在用户填写完 edittext 后,它将获取数据并将其存储以供下一个活动使用。此功能是我目前正在处理的功能,但此代码应该可以让您对您所询问的内容有一个很好的了解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 2015-09-30
      • 1970-01-01
      • 2017-09-02
      • 2012-04-16
      • 1970-01-01
      相关资源
      最近更新 更多