Я не могу записать в EditText, он исчезает, когда я пытаюсь что-то написать, потому что вызывается getView (), когда я изменяю данные - PullRequest
5 голосов
/ 31 января 2012

РЕДАКТИРОВАТЬ:

Я нашел причину, которая заключается в том, что getView () вызывается, когда я пытаюсь что-то редактировать, поэтому данные из DataAdapter загружаются и моиотредактированные изменения исчезают.

РЕДАКТИРОВАТЬ:

Я заметил одну вещь, если в списке просмотра есть несколько строк, то все в порядке, но если естьмного строк, которые список не может отображать на видимом экране (появляется полоса прокрутки для прокрутки к другим записям), тогда возникает проблема !!

Я работаю над проектом, в котором мы реализовали ВНУТРЕННЕЕ РЕДАКТИРОВАНИЕ с использованием ListView , т. Е. Данные могут редактироваться внутри списка.

Я определил xml для каждого элемента / строки этого ListView.Я использую Custom DataAdapter для связывания данных с ListView.

Когда я в первый раз загружаю эту активность, ListView загружается, я могу редактировать данные, и все работает нормально.Когда что-то редактируется, изменения сохраняются в базе данных SQLite, для этого у меня есть кнопка.

Теперь проблема в том, что после того, как данные сохранены В ПЕРВЫЙ ПЕРВЫЙ раз, а список снова загружен, яне может редактировать данные больше.Когда я пытаюсь отредактировать данные, клавиатура появляется, а затем автоматически исчезает и введенные данные также исчезают.Пожалуйста, смотрите снимки экрана.

Может ли кто-нибудь помочь мне решить эту проблему?

Мой класс адаптера:

public class QuestionAdapter extends ArrayAdapter<QuestionEntity> {
      private ArrayList<QuestionEntity> items;
      private Context CurrentContext;
      private QuestionEntity CurrentItem;
      private Cursor    OptionsCursor;


    public QuestionAdapter(Context context,  ArrayList<QuestionEntity> items, Cursor curOptions) 
    {
        super(context, R.layout.grid_item, items);
        this.CurrentContext = context;
        this.items          = items;
        this.OptionsCursor  = curOptions;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
    {
        //verify that the items list is still valid since
        //the list may have been cleared during an update
        if ((items == null) || ((position + 1) > items.size()))
                return convertView; //Can't extract item

        CurrentItem = items.get(position);    

        if(convertView == null) 
        {
            LayoutInflater inflater = LayoutInflater.from(CurrentContext);
            convertView = inflater.inflate(R.layout.grid_item, null);
        }

        if (convertView != null) 
        {

            TextView txtQuestion = (TextView) convertView.findViewById(R.id.txtQuestion);
            txtQuestion.setText(CurrentItem.getTitle());

            Spinner cmbOptions = (Spinner)convertView.findViewById(R.id.cmbOptions);

            /*
             * Load the options from OptionsCursor
             */

            LoadOptions(cmbOptions);

            /*
             * Attach onItemClick event with cmbOptions 
             * When the user change the option we will populate the comments based on the option
             */

            cmbOptions.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) 
            {
                try
                {
                    //If MyCondition is true show msg to user.

                }
                catch(Exception ex)
                {
                    ex.toString();
                }

            }
            });

        }
        return convertView;

    }

    private void LoadOptions(Spinner iacOptions)
    {
        //Load data in the spinner using the OptionsCursor

    }

}

enter image description here

1 Ответ

1 голос
/ 31 января 2012

Попробуйте пересмотреть свой код и посмотреть, вызывается ли метод Adapter.getView(..), когда он не должен. Это может произойти из-за избыточного вызова notifyDataSetChanged().

Просто добавьте протоколирование к этим методам и посмотрите, будут ли они вызваны в нужном месте и времени.

...