Android CursorAdapter с проблемой EditText - PullRequest
0 голосов
/ 01 апреля 2011

В моем Appliaction я использую CursorAdapter.Это отображает список, который является частью RelativeLayout.Этот список включает в себя несколько элементов (TextView, Button, EditText).EditText обычно не появляется на экране. Проблема: я импортирую любые данные в EditText и прокручиваю экран.В этот момент я вижу импортированные данные в другом EditText.ИЛИ:

Другой случай.Есть 3 EditText.Я использую виртуальную клавиатуру (например, используйте второй editText).Я получаю данные для редактирования текста.Нажмите кнопку Назад.И данные идут в Редактировать текст ниже.(Таким образом, данные переходят к третьему тексту редактирования). Вот код CursorAdapter:

class OOSListadapter extends CursorAdapter{
        OOSListadapter(Cursor c){
            super(OOS.this,c);
        }

        @Override
        public void bindView(View view, Context context, Cursor cursor) {
            OOSRow newRow = (OOSRow)view.getTag();
            newRow.populateRow(cursor);
        }

        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            LayoutInflater inflater=getLayoutInflater();
            View row=inflater.inflate(R.layout.oos_row, parent, false);
            OOSRow newRow = new OOSRow(row);

            row.setTag(newRow);

            return (row);
        }
    }

И вот одна строка из моего списка приложений.

class OOSRow {
        private TextView row_Action = null;;
        private TextView row_Must = null;;
        private TextView row_Lack = null;;
        private TextView row_itemName = null;;
        private EditText row_price = null;;
        private Button row_detail = null;
        private View row = null;

        OOSRow (View row){
            this.row = row;

            row_Action = (TextView)row.findViewById(R.id.oos_row_SignalA);
            row_Must = (TextView)row.findViewById(R.id.oos_row_SignalK);
            row_Lack = (TextView)row.findViewById(R.id.oos_row_SignalO);
            row_itemName = (TextView)row.findViewById(R.id.oos_row_itemLabel);
            row_price = (EditText)row.findViewById(R.id.oos_row_EditText);
            row_detail = (Button)row.findViewById(R.id.oos_row_detailButton);
        }

        void populateRow (Cursor c){
            Cursor specCursor = dbLoc.Query("SELECT PRICE, LACK, ORDERED FROM ORDERED WHERE ITEMID='"+ c.getString(1) +"'", null);
            specCursor.moveToFirst();
            row_itemName.setText(c.getString(2));
            row_itemName.setContentDescription(c.getString(1));
            if (specCursor.getString(1).toString().equals("Y")){
                row_itemName.setBackgroundColor(Color.parseColor("#FF0000"));
                row_itemName.setTextColor(Color.parseColor("#FFFFFF")); 
            }else{
                row_itemName.setBackgroundColor(Color.parseColor("#000000"));
                row_itemName.setTextColor(Color.parseColor("#FFFFFF"));
            }   
            row_itemName.setOnClickListener(SelectedLackItem);

            if (c.getString(5).toString().equals("I")){
                row_Action.setTextColor(Color.parseColor("#000000"));
                row_Action.setBackgroundColor(Color.parseColor("#FF0000"));
            }
            else{
                row_Action.setTextColor(Color.parseColor("#FFFFFF"));
                row_Action.setBackgroundColor(Color.parseColor("#000000"));
            }
            if (c.getString(4).toString().equals("I")){
                row_Must.setTextColor(Color.parseColor("#000000"));
                row_Must.setBackgroundColor(Color.parseColor("#00FF00"));
            }
            else{
                row_Must.setTextColor(Color.parseColor("#FFFFFF"));
                row_Must.setBackgroundColor(Color.parseColor("#000000"));
            }

            specCursor = dbLoc.Query("SELECT LACK FROM LASTORDERED WHERE ITEMID='"+c.getString(1)+"' AND COMPANYID ='"+dbLoc.GetCompanyId()+"'", null);
            if (specCursor.moveToFirst())
            {
                if (specCursor.getString(0).toString().equals("I")){
                    row_Lack.setTextColor(Color.parseColor("#000000"));
                    row_Lack.setBackgroundColor(Color.parseColor("#0000FF"));
                }else{
                    row_Lack.setTextColor(Color.parseColor("#FFFFFF"));
                    row_Lack.setBackgroundColor(Color.parseColor("#000000"));
                }
            }

            row_detail.setOnClickListener(OpenDetailScreenButton);
            row_detail.setContentDescription(c.getString(1));
            row_price.setContentDescription(c.getString(1));
            row_price.setInputType(0);
            /*row_price.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                }

                @Override
                public void beforeTextChanged(CharSequence s, int start, int count,
                        int after) {
                    row_price.setInputType(InputType.TYPE_CLASS_NUMBER);
                }

                @Override
                public void afterTextChanged(Editable s) {
                }
            });*/

            specCursor.close();
            specCursor = null;
        }
    }

И некоторые картинки:

When I get in any input После кнопки «Назад»: Change the EditText Text

Любая идея?

1 Ответ

2 голосов
/ 28 сентября 2011

У меня была очень похожая проблема. Мне помогло следующее решение:

<activity android:name= ".yourActivity" android:windowSoftInputMode="adjustPan"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...