简体   繁体   English

如何在关闭开关首选项时隐藏和取消隐藏特定的 ListView 项目?

[英]How to hide and unhide a specific ListView item on switch preference on off?

I want to hide the 2nd option from the list on switch on off, I know how switch works, just tell me how to hide-unhide the option from the list.我想在关闭时从列表中隐藏第二个选项,我知道开关是如何工作的,只要告诉我如何隐藏-取消隐藏列表中的选项即可。 I want to hide list view item by item position or something like that.我想按项目位置或类似的东西隐藏列表视图项目。

New query : Is it possible to add two different adapter and switch them on switch preference change?新查询:是否可以添加两个不同的适配器并在交换机首选项更改时切换它们? if yes then how to do that?如果是,那么该怎么做?

This is 100% possible.这是 100% 可能的。

String [] titles = {"abc","def","ghi"};
String [] descriptions = {"abc","def","ghi"};
int [] images = {R.drawable.ic_abc,R.drawable.ic_def,R.drawable.ic_ghi};
ListView lv;

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_list_view);
  lv = (ListView) findViewById(R.id.listView);
  final Adapter adapter = new Adapter(getApplicationContext(), titles, descriptions, images);
  lv.setAdapter(adapter);
  lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    }
  });
}

List view adapter列表视图适配器

class Adapter extends ArrayAdapter {
  int[] imageArray;
  String[] titleArray;
  String[] descriptionArray;

  public Adapter(Context context, String[] titles1, String [] description1, int[] img1) {
    super(context, R.layout.list_row, R.id.Titles, titles1);
    this.imageArray = img1;
    this.titleArray = titles1;
    this.descriptionArray = description1;
  }

  @NonNull
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View row = inflater.inflate(R.layout.list_row,parent,false);
    ImageView myImage = (ImageView) row.findViewById(R.id.Icons);
    TextView myTitle = (TextView) row.findViewById(R.id.Titles);
    TextView myDescription = (TextView) row.findViewById(R.id.Descriptions);

    myImage.setImageResource(imageArray[position]);
    myTitle.setText(titleArray[position]);
    myDescription.setText(descriptionArray[position]);
    return row;
  }
}

Switch preference切换偏好

    public SwitchPreference sw;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.pref_sw);
        sw = (SwitchPreference) findPreference("001");
    }

on switch on/off in main activity在主要活动中打开/关闭

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
boolean sw = sharedPreferences.getBoolean("001", true);
if (sw) {
  //hide list view item (only one)
} else {
  //unhide list view item (only one)
}

Well, take a look, so you can call remove properly:好吧,看一看,这样你就可以正确调用 remove 了:

class Adapter extends ArrayAdapter {
  List<ItemObject> data = new ArrayList();

  public Adapter(Context context, String[] titles1, String [] description1,     int[] img1) {
    super(context, R.layout.list_row, R.id.Titles, titles1);
    for(int i = 0; i < titles1.lenght; i++)
        data.add(new ItemObject(titles1[i], description1[i], img1[i]);
  }
  static class ItemObject {
       String title, description;
       int image;
       ItemObject(String ti, String desc, int img) {
           title = ti;
           description = desc;
           image = img;
       }
  }
  //plus the rest of your class

And change at getView并在 getView 处更改

 ItemObject row = data.get(position);
 myImage.setImageResource(row.image);
 myTitle.setText(row.title);
 myDescription.setText(row.description);

And add this method in the adapter:并在适配器中添加此方法:

 public void removeObject(int at) {
      data.remove(at);
      notifyDataSetChanged();
 }

So you can call removeObject with a position.所以你可以用一个位置调用removeObject。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM