Как получить значение из 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

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


person Jagdeep Singh    schedule 20.11.2013    source источник


Ответы (2)


Почему вы используете 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. Это одно и то же изображение каждый раз, т.е. один и тот же макет увеличивается для каждой строки, что означает, что один и тот же идентификатор увеличивается для всех строк, но все же это событие щелчка будет выполнять другую задачу для другой строки.

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

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

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

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

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

надеюсь поможет... :)

person Prakash    schedule 21.11.2013
comment
Я перешел с gridview на listView и заполнил список из базы данных курсором. Но теперь, что я делаю, я не понял, как получить значение каждого Edittext с его rowId - person Jagdeep Singh; 22.11.2013

@Prakash спасибо за идею, чувак

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

price_text.setTag(c.getPosition());

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

price_text.getTag()

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

person Jagdeep Singh    schedule 22.11.2013
comment
добавьте значения в список массивов класса типов. этот класс будет настраиваемым классом, который содержит два значения: идентификатор строки и текст из этой строки. - person Prakash; 03.04.2014