Как да получите стойност от 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 и попълних 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
добавете стойностите в arraylist от тип class. този клас ще бъде персонализиран клас, който съдържа двете стойности: идентификатор на ред и текст от този ред. - person Prakash; 03.04.2014