2012-01-02 13 views
2

私のアンドロイドアプリケーションの特定のアクティビティーに関するサポートが必要です。私はそれの隣にtextfieldの商品説明のリストを持っています。このtextfieldは数量を入れるのに使用されます。1行にTextViewとEditTextを使用したリストビュー

私は、カスタム行レイアウトでリストビューを使用してこれを行うことを考えていますが、これが正しい方法であるかどうか不思議です。

これらの項目はWebサービスから取得されるため、コードからリストを入力します。

これを達成する最も良い方法は何ですか?リストビューを使用するか、別のビューを使用しますか? edittextの編集が完了した後、自分のドメインオブジェクトに書き込むことはできますか?

答えて

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を塗りつぶした後、それはデータを取り、それを使用して次のアクティビティ用に保存します。この関数は私が現在取り組んでいる作業ですが、このコードはあなたが尋ねたことについてあなたに良いアイデアを与えるはずです。

3

あなたが話している方法は、内部にフォーカス可能なEditTextでListViewを作成することです。

同じように、listview用のカスタムアダプタを作成し、1つのEditTextで生のレイアウトを作成し、アダプタクラスを作成してすべての行に対して同じものを展開する必要があります。

詳細な例はここにある:Android Focusable EditText inside ListView

+0

これは私が考えていたものですが、これがベストプラクティスですか?私は今までアンドロイドで何か類似のものを見たことがありません。 –

+0

@BartVanRemorteleあなたの要件の種類によって異なります。 –

関連する問題