【问题标题】:Saving changes in Listview after scroll滚动后在 Listview 中保存更改
【发布时间】:2013-06-07 15:20:43
【问题描述】:

在我拥有的 Android 应用程序中,有几个 ListView 用户可以在其中更改行元素。例如,我有一个按钮,您可以在其中对用户 cmets 进行投票(想想 Facebook“点赞”或 Google+“+1”)。

当用户单击按钮时,可绘制图像会发生变化。这工作得很好。 问题:

当用户向下滚动然后返回时,状态不会被保存,它会回到原来的drawable。

这是我在adaptergetView()方法中的代码:

public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;
    LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {

        dCBlue = (Drawable) getContext().getResources().getDrawable(
                    R.drawable.ic_comment_blue);
        dCGray = (Drawable) getContext().getResources().getDrawable(
                    R.drawable.ic_comment_gray);

        convertView = inflater.inflate(R.layout.review_layout, parent,
        holder = new ViewHolder();
            holder.b2 = (Button) convertView.findViewById(R.id.bReview2);
            convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
        convertView.setOnCreateContextMenuListener(null);
    }

      // later on down 

    Review r = getItem(position);
    votedOn = r.wasVoted;
    final Drawable dVBlue = (Drawable) getContext().getResources()
                .getDrawable(R.drawable.ic_upvote_blue);
    final Drawable dVGray = (Drawable) getContext().getResources()
                .getDrawable(R.drawable.ic_upvote_gray);

    if (votedOn.equals("1")) {
         holder.b2.setCompoundDrawablesWithIntrinsicBounds(null, null, dVBlue, null);
         holder.b2.setTag(R.drawable.review_button_press);
     } else {
         holder.b2.setCompoundDrawablesWithIntrinsicBounds(null, null,dVGray, null);
         holder.b2.setTag(R.drawable.review_button);
     }

     holder.b2.setOnClickListener(new OnClickListener() {
       public void onClick(View v) {

        if (holder.b2.getTag().equals(R.drawable.review_button)) {
            holder.b2.setCompoundDrawablesWithIntrinsicBounds(null, null, dVBlue, null);
    holder.b2.setTag(R.drawable.review_button_press);

        } else {
    holder.b2.setCompoundDrawablesWithIntrinsicBounds(null, null, dVGray, null);
        holder.b2.setTag(R.drawable.review_button);

         }
        bVote = holder.b2;
        new HelpfulTask().execute(passing);


    });
 return convertView;

}

我是不是把这个安排乱了?

【问题讨论】:

    标签: android android-listview adapter


    【解决方案1】:

    我看不到您更新您的评论对象。您应该更新代表一行以指示投票的对象,然后视图绑定应该处理它。

    【讨论】:

    • 当您更新该行的图像时,您应该以某种方式将该信息提交给代表该行的 Review 对象。然后,当您下次显示此行时执行 getItem(position) 时,您将获得该对象指示的投票状态
    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    相关资源
    最近更新 更多