2013-11-20 6 views
0

Я использовал вид сетки в моем проектеКак получить значение из EditText в GridView

Мой файл макета деятельности

<GridView 
    android:id="@+id/gridView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="start" 
    android:numColumns="1" 
    android:stretchMode="spacingWidth" 
    android:layout_below="@+id/spinner1" 
    android:layout_marginLeft="20dip" 
    android:layout_marginRight="10dip" 
    android:layout_marginTop="20dip" 
    android:visibility="visible" > 
    </GridView> 

Мой макет сетки (grid_change_prices.xml)

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="320dp" 
    android:layout_height="match_parent" 
    android:clickable="false" 
> 
    <TableLayout 
     android:id="@+id/tableLayout1" 
     android:layout_width="wrap_content" 
     android:layout_height="30dp" 
     android:background="#ff0000" > 


     <TableRow 
      android:id="@+id/tableRow1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="1dip" 
      android:background="#ffffff" 
      android:paddingTop="0dip" > 

      <TextView 
     android:id="@+id/cplabel" 
     android:layout_width="120dp" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="0dp" 
     android:paddingLeft="5dp" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <EditText 
     android:id="@+id/cpprice" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:hint="@string/add_price" 
     android:layout_marginTop="0dp" 
     android:textSize="12dp" 
     android:inputType="number" /> 
     </TableRow> 
    </TableLayout> 


</RelativeLayout> 

Мой выход с эмулятора проверить этот URL http://i.stack.imgur.com/Uc6cs.png

Моего код файл

public void fillgrid(int categoryid,String car){ 
gridView = (GridView) findViewById(R.id.gridView); 
final DatabaseClass2 db = new DatabaseClass2(this); 
    db.openDataBase(); 
Cursor c = db.getprice(categoryid); 
startManagingCursor(c); 
String[] fromColumns = {"_id",DatabaseClass2.colPrice}; 
int[] toViews = {R.id.cplabel, R.id.cpprice}; 
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
     R.layout.grid_change_prices, c, fromColumns, toViews); 
     //c.moveToNext(); 
gridView.setAdapter(adapter); } 

Теперь мой запрос Когда я нажмите кнопку редактирования, я хочу, чтобы обновить свою базу данных с новыми значениями я попытался получить значение от редактирования текста с помощью .gettext (). но это только возвращает значение из первого EditText

Как я получил значение из других edittexts, с идентификатором строки, а так, что я обновить базу данных с новой ценой таким же конструкция ..?

ответ

1

Почему вы используете GridView для такой простой работы? лучше, если вы используете ListView, и было бы проще заполнить список и получить значения из других файлов EditText.

Я могу дать вам идею ... просто увидеть этот код, что я делаю в этом:

public class RecordExpenseAdapter extends ArrayAdapter<HashMap<String, String>> 
    { 

     Intent intent; 
     Context context; 
     int layoutResourceId; 
     ArrayList<HashMap<String, String>> RecordList = new ArrayList<HashMap<String, String>>();   
     public RecordExpenseAdapter(Context context, int layoutResourceId,ArrayList<HashMap<String, String>> RecordList) 
     { 
      super(context, layoutResourceId, RecordList); 
      this.layoutResourceId = layoutResourceId; 
      this.context = context; 
      this.RecordList = RecordList; 
      this.intent = new Intent(context, ScanReceipt.class); 
      //Log.d("ASD:","comp intialize"); 
     }  

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View row = convertView; 
      ImageHolder holder = null; 

      try{ 


     if(row == null) 
     { 
     Log.d("ASD:","insdie getview"); 
     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 
     holder = new ImageHolder(); 
     holder.categoryName = (TextView)row.findViewById(R.id.textView1); 
     holder.date = (TextView)row.findViewById(R.id.textView2); 
     holder.amount = (TextView)row.findViewById(R.id.textView3); 
     holder.record_rid = (TextView)row.findViewById(R.id.ridRecord);  
     holder.cid=(TextView)row.findViewById(R.id.cid); 
     holder.vendor=(TextView)row.findViewById(R.id.vendor); 
     holder.description=(TextView)row.findViewById(R.id.desc); 
     holder.attachURL=(TextView)row.findViewById(R.id.userFile); 
     holder.attachImage=(ImageView)row.findViewById(R.id.attachment); 
     holder.scanReceipt = (ImageView)row.findViewById(R.id.imageView2); 

     row.setTag(holder); 
     holder.scanReceipt.setTag(position); 

     holder.scanReceipt.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       try{ 
        Log.e("Scan Receipt Button List", "1"); 
        ImageView iv = (ImageView) v; 
        Log.e("Scan Receipt Button List", "2"); 
        int pos = (Integer) iv.getTag(); 
        Log.e("Scan Receipt Button List", "3"); 
        ScanReceipt.rid = RecordList.get(pos).get("rid").toString(); 
        Log.e("Scan Receipt Button List", "4"); 
        //Toast.makeText(context, "Button Clicked", Toast.LENGTH_LONG).show(); 
        RecordExpenseAdapter.this.doIt(); 
       }catch(Exception e){ 
        Log.e("Error on click on Scan Receipt Button List", e.getMessage().toString()); 
       } 
      } 
     }); 

//  if(picture.get("userfile")=="no") 
//  { 
//   holder.attachImage.setVisibility(View.INVISIBLE); 
//  } 
//  else 
//  { 
//   holder.attachImage.setVisibility(View.VISIBLE); 
//  } 
     row.setTag(holder); 

     } 
     else 
     { 
     holder = (ImageHolder)row.getTag(); 
     } 

     HashMap<String, String> picture = RecordList.get(position); 

     holder.categoryName.setText(picture.get("category_name")); 
     holder.date.setText(picture.get("date")); 
     holder.amount.setText(picture.get("amount")); 
     holder.record_rid.setText(picture.get("rid")); 
     holder.cid.setText(picture.get("cid")); 
     holder.vendor.setText(picture.get("vendor")); 
     holder.description.setText(picture.get("description")); 
     holder.attachURL.setText(picture.get("image")); 

     Log.e("Record Expense Adapter 0 : IMAGE", picture.get("image").toString()); 
     Log.e("RID : " + position, picture.get("rid").toString()); 

    // Log.e("error value", picture.get("userfile")); 

     //Log.e("error value", "value is error"); 

//  if(picture.get("userfile")=="no") 
//  { 
//   holder.attachImage.setVisibility(View.INVISIBLE); 
//  } 
//   
//  else 
//  { 
//   holder.attachImage.setVisibility(View.VISIBLE); 
//  } 
     if(picture.get("image").toString().trim().equalsIgnoreCase("no")){ 
      holder.scanReceipt.setVisibility(View.VISIBLE); 
      holder.attachImage.setVisibility(View.INVISIBLE); 
     }else{ 
      holder.scanReceipt.setVisibility(View.GONE); 
      holder.attachImage.setVisibility(View.VISIBLE); 
     } 
      } 
      catch(Exception e){ 

      } 
     return row; 
     } 

public void doIt(){ 
    Log.e("Adapter 0", "In do It"); 

    context.startActivity(intent); 
} 

     static class ImageHolder 
     { 
       TextView categoryName; 
       TextView date; 
       TextView amount; 
       TextView record_rid; 
       TextView vendor; 
       TextView cid; 
       TextView description; 
       TextView attachURL;    
       ImageView attachImage,scanReceipt; 
     } 

} 

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

что вам нужно сделать: просто используйте EditText, поскольку я использую ImageView. Внесите TextWatcher, когда я реализую прослушиватель кликов.

вы должны использовать пользовательский список для этого сказать this-

List<CustomClass> list = new ArrayList<CustomClass>(); 

в этом пользовательском классе, поставить общие переменные, так что вы можете получить доступ к тем, с помощью объекта CustomClass и добавить этот объект в этот список выше созданного ,

Как только вы получите значения в этом списке, вы можете использовать его любым способом.

Надеюсь, это поможет ...:)

+0

Я изменил с gridview на listView и заполнил список из базы данных курсором. Но теперь, что я делаю, я не понял, как получить значение каждого Edittext с его rowId –

0

@Prakash thanxx для идеи чувак

Теперь я приложил textwatcher к EditText поле и сумел получить RowId с помощью этого

price_text.setTag(c.getPosition()); 

И извлечь эту позицию в afterTextChanged

price_text.getTag() 

Но теперь как я могу сохранить эти значения Как вы сказали в вышеприведенном сообщении ....

+0

добавить значения в arraylist типа класс. этот класс будет настраиваемым классом, который содержит два значения: идентификатор строки и текст из этой строки. – Prakash

Смежные вопросы