簡體   English   中英

當適配器不在片段類中時,如何在Gridview中實現Delete方法?

[英]How can I realize delete method in Gridview?When the adapter is not in fragment class

我在將適配器類編寫為片段的內部類之前就做了。 但是我想知道是否有可能將適配器編寫為一個獨立的類?

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_grid, null);
        holder = new ViewHolder(convertView);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    holder.build(getItem(position).toString());
    deleteView = convertView.findViewById(R.id.delete_markView);
    deleteView.setVisibility(isShowDelete ? View.VISIBLE : View.GONE);
    deleteView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            removeItemInShared(items.get(position));
            items.remove(position);
            notifyDataSetChanged();
            notifyDataSetInvalidated();
            Toast.makeText(getContext(), "Deleted", Toast.LENGTH_SHORT).show();
        }
    });
    return convertView;
}

google的所有搜索結果都是adapter.notifyDataSetChanged(); 但是適配器不在適配器類中。 有什么辦法嗎?

另一個notifyDataSetChanged()令人擔憂。

GridViewAdapter.java

 public void setIsShowDelete(boolean isShowDelete) {
    this.isShowDelete = isShowDelete;
    notifyDataSetChanged();
}

由片段g_adapter.setIsShowDelete(false);調用

是的,可以將適配器寫為其他類。您要做的就是為適配器類創建一個構造函數,並將數組列表從片段傳遞給適配器類構造函數作為參數。

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    //your arraylist here
    MyAdapter myadp=new MyAdpater(arraylilst);
     listview.setAdapter(myadp);
        myadp.notifyDataSetChanged();
    return super.onCreateView(inflater, container, savedInstanceState);
      }

在您的適配器類中:

public class MyAdapter extends BaseAdapter
  {
   ArrayList<String> items;
    public void Myadapter(ArrayList<String> items)
     {
    this.items=items;
    }
   //override methods

     @Override
      public View getView(final int position, View convertView, ViewGroup         
       parent) {
      ViewHolder holder;
       if (convertView == null) {
    convertView =        
    LayoutInflater.from(getContext()).inflate(R.layout.item_grid, null);
     holder = new ViewHolder(convertView);
    convertView.setTag(holder);
     } else {
    holder = (ViewHolder) convertView.getTag();
     }
      holder.build(getItem(position).toString());
      deleteView = convertView.findViewById(R.id.delete_markView);
     deleteView.setVisibility(isShowDelete ? View.VISIBLE : View.GONE);
    deleteView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        removeItemInShared(items.get(position));
        items.remove(position);

        Toast.makeText(getContext(), "Deleted", Toast.LENGTH_SHORT).show();
    }
});
return convertView;
}

希望這會有所幫助。快樂編碼!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM