【问题标题】:remove previously highlighted item in listview after click on new item单击新项目后删除列表视图中先前突出显示的项目
【发布时间】:2017-08-09 02:31:12
【问题描述】:

我有一个列表视图。在这个列表视图中,我突出显示了列表视图项的文本。当我单击列表视图中的另一个项目时,我想删除前一个项目的文本颜色和文本样式。

这里是列表视图适配器代码`

public class SubLessionAdapter extends ArrayAdapter<SubLessionDetail> {
Context context;
int resource, textViewResourceId;
List<SubLessionDetail> items;
List<SubLessionDetail> tempItems;
List<SubLessionDetail> suggestions;
private Dialog pinDialog;
private EditText popup_title, popup_review;
private TextView submit;
private RatingBar rating;
private String flag;
private VideoList videoList;
private CourseListMain myCourseListMain;
SubLessionAdapter.ViewHolder publicholder;
SharedPreferences pref;
SharedPreferences.Editor editor;
int listposition;

String topic_position,course_position,lession_position,item_id;

public SubLessionAdapter(Context dummyTopicList, ArrayList<SubLessionDetail> lessionLIstDetails, String flag,String course_position,String topic_position,String lession_position,String item_id) {
    super(dummyTopicList, 0, lessionLIstDetails);
    this.context = dummyTopicList;
    this.items = lessionLIstDetails;
    this.flag=flag;
    this.course_position=course_position;
    this.topic_position=topic_position;
    this.lession_position=lession_position;
    this.item_id=item_id;


    pref = getContext().getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
    editor = pref.edit();


    myCourseListMain = PrefUtils.getMyCourse(getContext());
    listposition = pref.getInt("sublistpostion",0);

}


private class ViewHolder {

    TextView title;
    ImageView img_lock,download_green,download_gray,itemcheckded;
    LinearLayout topic;


}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    SubLessionAdapter.ViewHolder holder = null;



    if (convertView == null) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.list_topics, parent, false);

        holder = new SubLessionAdapter.ViewHolder();
        holder.topic =(LinearLayout)convertView.findViewById(R.id.topic);
        holder.title = (TextView) convertView.findViewById(R.id.title);
        holder.img_lock = (ImageView) convertView.findViewById(R.id.img_lock);
        holder.download_gray=(ImageView)convertView.findViewById(R.id.downlaod_gray_sublist);
        holder.download_green=(ImageView)convertView.findViewById(R.id.download_green_sublist);
        holder.itemcheckded =(ImageView)convertView.findViewById(R.id.itemchecked);

        convertView.setTag(holder);

    }
    else
    {
        holder = (SubLessionAdapter.ViewHolder) convertView.getTag();
    }


    SubLessionDetail productItems = items.get(position);
    holder.title.setText( productItems.getTitle());
    if (productItems.getLocked().equals("1")) {holder.img_lock.setVisibility(View.GONE);} else {holder.img_lock.setVisibility(View.VISIBLE);}
    if (flag.equals("my_course")){holder.img_lock.setVisibility(View.GONE);}else {holder.img_lock.setVisibility(View.VISIBLE);}



    if(listposition==position){

        holder.title.setTypeface(null, Typeface.BOLD);
        holder.title.setTextColor(Color.parseColor("#4dd289"));
    }else{
        holder.title.setTypeface(null, Typeface.NORMAL);
        holder.title.setTextColor(Color.parseColor("#000000"));
    }


    final ViewHolder finalHolder = holder;
    convertView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            finalHolder.title.setTypeface(null, Typeface.BOLD);
            finalHolder.title.setTextColor(Color.parseColor("#4dd289"));
           // finalHolder.itemcheckded.setVisibility(View.VISIBLE);

            switch (flag) {

                case "my_course":

                    Intent intent = new Intent(getContext(), ContentTabActivity.class);
                    intent.putExtra("titlevalue",myCourseListMain.getCourseArrayList().get(Integer.parseInt(course_position)).getTopicListMain().getTopicDetailsArrayList().get(Integer.parseInt(topic_position)).getLessionArrayList().get(Integer.parseInt(lession_position)).getLessionLIstDetailArrayList().get(position).getTitle());
                    intent.putExtra("lession_id", myCourseListMain.getCourseArrayList().get(Integer.parseInt(course_position)).getTopicListMain().getTopicDetailsArrayList().get(Integer.parseInt(topic_position)).getLessionArrayList().get(Integer.parseInt(lession_position)).getLessionLIstDetailArrayList().get(position).getLession_id());
                    intent.putExtra("id", item_id);
                    intent.putExtra("lession_position", lession_position);
                    intent.putExtra("postion_current_selected_item",position+"");
                    intent.putExtra("course_position", course_position);
                    intent.putExtra("topic_position", topic_position);
                    editor.putString("sublession_has_1_item","no");
                    editor.putInt("sublistpostion",position);
                    editor.commit();
                    context.startActivity(intent);


                    break;


                case "curriculam":
                    Toast.makeText(getContext(), "Content is Locked", Toast.LENGTH_SHORT).show();
                    break;

            }

        }
    });


    return convertView;

}

} `

现在发生的情况是,当我单击该项目时,它会更改 textstyle 和 textcolor,但前一个项目仍然突出显示。

我想一次只突出显示一个项目(清除上一个项目的突出显示)。

下面是一些现在正在发生的事情的图片。

【问题讨论】:

标签: android listview


【解决方案1】:

您的数据源中应该有一个字段来指示是否选择了数据,并且您应该只更改 onclick 侦听器中的字段而不是突出显示视图。更改视图的具体操作应该发生在getView() 方法中,在此期间您应该根据字段值设置或恢复文本颜色和字体。

你可以这样做:

public class SubLessionAdapter extends ArrayAdapter<SubLessionDetail> {
Context context;
int resource, textViewResourceId;
List<SubLessionDetail> items;
List<SubLessionDetail> tempItems;
List<SubLessionDetail> suggestions;
private Dialog pinDialog;
private EditText popup_title, popup_review;
private TextView submit;
private RatingBar rating;
private String flag;
private VideoList videoList;
private CourseListMain myCourseListMain;
SubLessionAdapter.ViewHolder publicholder;
SharedPreferences pref;
SharedPreferences.Editor editor;
private SubLessionDetail preSelectedItem;

String topic_position,course_position,lession_position,item_id;

public SubLessionAdapter(Context dummyTopicList, ArrayList<SubLessionDetail> lessionLIstDetails, String flag,String course_position,String topic_position,String lession_position,String item_id) {
    super(dummyTopicList, 0, lessionLIstDetails);
    this.context = dummyTopicList;
    this.items = lessionLIstDetails;
    this.flag=flag;
    this.course_position=course_position;
    this.topic_position=topic_position;
    this.lession_position=lession_position;
    this.item_id=item_id;


    pref = getContext().getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
    editor = pref.edit();


    myCourseListMain = PrefUtils.getMyCourse(getContext());
    listposition = pref.getInt("sublistpostion",0);

}


private class ViewHolder {

    TextView title;
    ImageView img_lock,download_green,download_gray,itemcheckded;
    LinearLayout topic;


}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    SubLessionAdapter.ViewHolder holder = null;



    if (convertView == null) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.list_topics, parent, false);

        holder = new SubLessionAdapter.ViewHolder();
        holder.topic =(LinearLayout)convertView.findViewById(R.id.topic);
        holder.title = (TextView) convertView.findViewById(R.id.title);
        holder.img_lock = (ImageView) convertView.findViewById(R.id.img_lock);
        holder.download_gray=(ImageView)convertView.findViewById(R.id.downlaod_gray_sublist);
        holder.download_green=(ImageView)convertView.findViewById(R.id.download_green_sublist);
        holder.itemcheckded =(ImageView)convertView.findViewById(R.id.itemchecked);

        convertView.setTag(holder);

    }
    else
    {
        holder = (SubLessionAdapter.ViewHolder) convertView.getTag();
    }


    final SubLessionDetail productItems = items.get(position);
    holder.title.setText( productItems.getTitle());
    if (productItems.getLocked().equals("1")) {holder.img_lock.setVisibility(View.GONE);} else {holder.img_lock.setVisibility(View.VISIBLE);}
    if (flag.equals("my_course")){holder.img_lock.setVisibility(View.GONE);}else {holder.img_lock.setVisibility(View.VISIBLE);}


    if (productItems.isSelected()) {
        holder.title.setTypeface(null, Typeface.BOLD);
        holder.title.setTextColor(Color.parseColor("#4dd289"));
    } else {
        holder.title.setTypeface(null, Typeface.NORMAL);
        holder.title.setTextColor(Color.parseColor("#000000"));
    }


    final ViewHolder finalHolder = holder;
    convertView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            if (preSelectedItem != null) {
                preSelectedItem.setSelected(false);
            }
            productItems.setSelected(true);
            preSelectedItem = productItems;
            notifyDataSetChanged();

            switch (flag) {

                case "my_course":

                    Intent intent = new Intent(getContext(), ContentTabActivity.class);
                    intent.putExtra("titlevalue",myCourseListMain.getCourseArrayList().get(Integer.parseInt(course_position)).getTopicListMain().getTopicDetailsArrayList().get(Integer.parseInt(topic_position)).getLessionArrayList().get(Integer.parseInt(lession_position)).getLessionLIstDetailArrayList().get(position).getTitle());
                    intent.putExtra("lession_id", myCourseListMain.getCourseArrayList().get(Integer.parseInt(course_position)).getTopicListMain().getTopicDetailsArrayList().get(Integer.parseInt(topic_position)).getLessionArrayList().get(Integer.parseInt(lession_position)).getLessionLIstDetailArrayList().get(position).getLession_id());
                    intent.putExtra("id", item_id);
                    intent.putExtra("lession_position", lession_position);
                    intent.putExtra("postion_current_selected_item",position+"");
                    intent.putExtra("course_position", course_position);
                    intent.putExtra("topic_position", topic_position);
                    editor.putString("sublession_has_1_item","no");
                    editor.putInt("sublistpostion",position);
                    editor.commit();
                    context.startActivity(intent);


                    break;


                case "curriculam":
                    Toast.makeText(getContext(), "Content is Locked", Toast.LENGTH_SHORT).show();
                    break;

            }

        }
    });


    return convertView;

}

您没有显示您的 SubLessionDetail 类,您还应该在其中添加一个名为 selected 的布尔字段。

【讨论】:

  • 你能用一些代码详细说明吗?我已经用 adpater 类代码更新了我的问题。
  • @smarteducation 我已经展示了我的代码更改作为示例。
【解决方案2】:

你要做的是保存项目的点击位置,然后检查点击项目的文本颜色是否为青色。如果是,则执行您想要的操作,如果不是,则清除列表,调用通知它,然后再次添加完整列表。通知添加后将文本颜色设置在我们之前保存的位置。

 List<Bean> list;
 List<Bean> tempList;
 tempList = list;
 int pos;

 //Clean List
 public void cleanList() {
    int size = this.list.size();
    this.list.clear();
    notifyItemRangeRemoved(0, size);
    list.addAll(tempList);
    notifyDataSetChanged();
}

现在是 textView 的点击监听器

 textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              pos =  = getAdapterPosition();
             if (textView.getTextColors().equals(<ColorYouDesire>)){
               Log.d(TAG,"Item Clicked Again");
               }else{
               cleanList();
               textView.setTextColor(<ColorYouDesire>);
               notifyItemChanged(pos);
               }
            }
        });

试试这个,让我知道发生了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 2019-09-03
    相关资源
    最近更新 更多