我正在閱讀一些數據庫中的產品詳細信息,然後將它們添加到ListView中。如何將EditText添加到ListView中
然後,我想在每行上的一個數量EditText框,客戶可以在其中添加數量。 我該怎麼做?我做了一個簡單的頁面,但是當我輸入一個數字並向下滾動然後再次備份時,我丟失了數據,或者它甚至出現在另一行的另一個數字框中。
我正在閱讀一些數據庫中的產品詳細信息,然後將它們添加到ListView中。如何將EditText添加到ListView中
然後,我想在每行上的一個數量EditText框,客戶可以在其中添加數量。 我該怎麼做?我做了一個簡單的頁面,但是當我輸入一個數字並向下滾動然後再次備份時,我丟失了數據,或者它甚至出現在另一行的另一個數字框中。
好了,所以你需要做的第一件事是創建要在列表中的每一行有佈局的Row.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"
android:orientation="horizontal"
>
<ImageView
android:id="@+id/icon"
android:padding="2dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ok"
/>
<TextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="40sp"
/>
//Add a edittext here..
/LinearLayout>
接下來,您將需要擴展列表視圖並重寫獲取視圖以加載您的自定義行。
public class Demo extends ListActivity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
setListAdapter(new Adapter());}
//Here extends a ArrayAdapter to create your custom view
class Adapter extends ArrayAdapter<String> {
Adapter() {
super(DynamicDemo.this, R.layout.row, R.id.label, items);
}
public View getView(int position, View convertView,
ViewGroup parent) {
//Here load in your views such as the edittext
}
。這是你將需要開始,那麼你可以調用onItemListClick()來獲取當用戶單擊該項目的每個點擊的東西。
你可以得到一個完整的教程這裏...
編輯:
此外,如果你想保存在數量框中的數字,你需要有一個包。 如 saveState()方法
這將保存您的用戶數量,而應用程序仍然活着時,當帶回到視圖從數據包拉數字或int。
這應該是幫助下
http://www.edumobile.org/android/android-beginner-tutorials/state-persistence/
您應該將狀態(用戶在EditText中輸入的內容)保存在提供給列表適配器的某種數組中。可能您在列表適配器的getView()方法中創建新的EditText。
嗨是我一直在玩弄
package sanderson.swords.mobilesales;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.AdapterView.OnItemClickListener;
public class OrderProductSearch extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try{
setContentView(R.layout.orderproducts);
}
catch (Exception e) {
//
String shaw="";
shaw = e.getMessage();
}
//Create view of the list where content will be stored
final ListView listContent = (ListView)findViewById(R.id.orderproductlistview);
//Set for fast scrolling
listContent.setFastScrollEnabled(true);
//Create instance of the database
final DbAdapter db = new DbAdapter(this);
//Open the Database and read from it
db.openToRead();
//Routine to call all product sub groups from the database
final Cursor cursor = db.getAllSubGroupProduct();
//Manages the cursor
startManagingCursor(cursor);
//The columns we want to bound
String[] from = new String[]{DbAdapter.KEY_PRNAME,
DbAdapter.KEY_PRSIZE, DbAdapter.KEY_PKQTY};
//This is the id of the view that the list will be map to
int[] to = new int[]{R.id.productlinerow, R.id.productlinerow2, R.id.productlinerow3};
//Create simple cursor adapter
SimpleCursorAdapter cursorAdapter =
new SimpleCursorAdapter(this, R.layout.productlinerow, cursor, from, to);
//Set the cursor to the list content view
listContent.setAdapter(cursorAdapter);
//Close the database
db.close();
//check if any orders are on the system
int check = cursor.getCount();
AlertDialog.Builder ps = new AlertDialog.Builder(OrderProductSearch.this);
final Button border = (Button) findViewById(R.id.orderqty);
//notify the user if there are no orders on the system
if (check == 0)
{
ps.setTitle("No Products Found");
ps.setMessage("There are no products in this group");
ps.setPositiveButton("Ok", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which)
{
OrderProductSearch.this.finish();
startActivity(new Intent("sanderson.swords.mobilesales.PRODUCTENQUIRY"));
}
});
ps.show();
}
border.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
try {
String clicked = "";
clicked = "neil shaw";
} catch (Exception e) {
String error = e.getMessage();
error = error + "";
}
}
});
你也可以使用一個TextWatcher和用戶輸入保存每個量轉換成代碼數組或其他東西。然後在列表視圖中按位置加載每個項目。這可能是保持持久性的另一種方式。 –
所以當輸入一個數字時,我可以直接查詢該行以獲取它們輸入的值? – shawrie
正確。因此,如果該項目在第一行,並且用戶輸入的數量爲3。數組.get(position)將成爲1,因爲它是第一行。因此,您將獲得它所在的行的位置,並通過其行位置拉取數據。 –