notifyDataSetChanged () не работает для пользовательского представления списка

#java #android #listview #parse-platform

#java #Android #listview #синтаксический анализ-платформа

Вопрос:

В моей основной деятельности есть хэш-карта, которая получает данные с сервера синтаксического анализа для передачи в пользовательский класс адаптера представления списка.

Когда я нажимаю кнопку в строке моего представления списка, я хочу, чтобы текст менялся при каждом нажатии на него. Однако текст в строке изменяется только при однократном нажатии кнопки. Если я нажму на это снова, ничего не произойдет. Я предполагаю, что это как-то связано с тем, что мой notifyDataSetChanged() неправильно вызван.

Кнопка и textview настроены в классе адаптера пользовательского представления списка. Должен ли я вызывать notifyDataSetChanged() в своей основной деятельности или в своем классе адаптера пользовательского представления списка?

customFeedListViewAdapter.notifyDataSetChanged(); В моем MainActivity позволяет мне успешно изменять текст при однократном нажатии кнопки. Однако, когда я снова нажимаю кнопку, ничего не происходит.

Основное действие:

   customFeedListViewAdapter = new CustomFeedListViewAdapter(this, arrayFeedList);
    feedList = (ListView) findViewById(R.id.feedListView);
    feedList.setAdapter(customFeedListViewAdapter);


    ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("FeedItem");
    ParseUser.getCurrentUser().getUsername());
    query.addDescendingOrder("createdAt");


    query.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> objects, ParseException e) {

            if(e == null){

                    for(ParseObject object: objects){

                        HashMap<String, String> data = new HashMap<String, String>();
                        data.put("user", (object.getString("username")));
                        data.put("feed", (object.getString("textItem")));
                        data.put("likes", String.valueOf(object.getInt("likes")));
                        data.put("replies",String.valueOf(object.getInt("comments")));

                        object.saveInBackground();


                        arrayFeedList.add(data);
                        customFeedListViewAdapter.notifyDataSetChanged();


                    }

                     customFeedListViewAdapter = new CustomFeedListViewAdapter(getApplicationContext(), arrayFeedList);
                    feedList.setAdapter(customFeedListViewAdapter);

            }

        }
    });
  

Пользовательский адаптер ListView:

   @Override
public View getView(final int i, View view, ViewGroup viewGroup) {

     position = i;
    final int likes[] = new int[feed.size()];

    final ViewHolder holder;

    if (view == null) {

        view = inflater.inflate(R.layout.feed_list_row, viewGroup, false);

        holder = new ViewHolder();

        holder.feedProfilePic = (ImageView) view.findViewById(R.id.feedProfilePic);
        holder.feedUsername = (TextView) view.findViewById(R.id.feedUsernameId);
        holder.feedNumOfLikes = (TextView) view.findViewById(R.id.feedNumofLikes);
        holder.feedFeedItem = (TextView) view.findViewById(R.id.feedTextId);
        holder.feedDate = (TextView) view.findViewById(R.id.feedDate);
        holder.feedNumofReplies = (TextView) view.findViewById(R.id.feedRepliesNumId);
        holder.feedUpVoteButton = (Button) view.findViewById(R.id.feedUpVoteButton);
        holder.feedDownVoteButton = (Button) view.findViewById(R.id.feedDownVoteButton);
        holder.feedCommentButton = (Button) view.findViewById(R.id.feedCommentButton);
        holder.feedListView = (ListView) view.findViewById(R.id.feedListView);

        view.setTag(holder);

        HashMap<String, String> mFeed = new HashMap<>();

        mFeed = feed.get(i);

        holder.feedUsername.setText(mFeed.get("user"));
     holder.feedFeedItem.setText(mFeed.get("feed"));
       holder.feedDate.setText(mFeed.get("date"));
        holder.feedNumOfLikes.setText(mFeed.get("likes"));
        likesString = mFeed.get("likes");
         mLikes = Integer.valueOf(likesString);

        holder.feedNumofReplies.setText(mFeed.get("replies"));

        position = i;

    }
    else{
        position = i;
        holder = (ViewHolder) view.getTag();
    }

    holder.feedUpVoteButton.setTag(position);
    holder.feedDownVoteButton.setTag(position);




    ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("FeedItem");
    query.addDescendingOrder("createdAt");

    query.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(final List<ParseObject> objects, ParseException e) {

            if(e == null){


                    for (final ParseObject object : objects) {


                         holder.feedUpVoteButton.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {


                                int pos = (Integer) v.getTag();

                                parseObFeed = objects.get(pos);



                                    likes[pos] = mLikes;
                                Log.i("yo","Check1: Get Likes from Parse:   "   String.valueOf(likes[pos]));
                                    likes[pos]  = 1;
                                Log.i("yo","Check2: add 1:   "   String.valueOf(likes[pos]));

                                    parseObFeed.put("likes", likes[pos]);

                                Log.i("yo","Check3: Put Likes in Parse:   "   String.valueOf(likes[pos]));


                                    parseObFeed.put("upClicked", true);
                                    parseObFeed.saveInBackground();
                                    holder.feedNumOfLikes.setText(String.valueOf(parseObFeed.getInt("likes")
                                    ));
                                Log.i("yo","Check4: Get Likes in Set Text:   "   String.valueOf(likes[pos]));



                    }

            }

        }
    });


    return view;
}

private class ViewHolder {
    ImageView feedProfilePic;
    TextView feedUsername;
    TextView feedNumOfLikes;
    TextView feedFeedItem;
    TextView feedDate;
    TextView feedNumofReplies;
    Button feedUpVoteButton;
    Button feedDownVoteButton;
    Button feedCommentButton;
    ListView feedListView;

}
  

Комментарии:

1. вызовите notifyDataSetChanged() внутри нажатия кнопки

2. я сделал список массивов глобальным и в конце моего нажатия кнопки.. Я удалил индекс, затем добавил пользовательский интерфейс и вызвал notifyDataSetChanged(); , я все еще отлаживаю, но, похоже, это сработает.