2017-06-03 91 views
0

我在我的回收视图的自定义适配器中有一个图像视图,我通过长按回收视图来设置图像视图的可见性其工作正常,问题我我面临的是,当设置可见性是真实的,并关闭应用程序或去第二次活动的可见性去我需要的东西,当我关闭应用程序或更改活动的可见性仍然是一样的..我是新来的android如何保存在自定义适配器中的imageview状态

public class RecycleViewAdapter extends 
RecyclerView.Adapter<RecycleViewAdapter.RecycleViewHolder> { 
private List<FileName> fileNames; 
private Context context; 
private OnItemClicked onClick; 

public RecycleViewAdapter(Context context, List<FileName> fileNames) { 
    this.context = context; 
    this.fileNames = fileNames; 
} 

@Override 
public RecycleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    LayoutInflater mInflater = LayoutInflater.from(parent.getContext()); 
    ViewGroup mainGroup = (ViewGroup) mInflater.inflate(R.layout.grid_item, parent, false); 
    RecycleViewHolder listHolder = new RecycleViewHolder(mainGroup); 
    return listHolder; 
} 

@Override 
public void onBindViewHolder(RecycleViewHolder holder, final int position) { 
    final FileName model = fileNames.get(position); 
    RecycleViewHolder mainHolder = holder; 
    mainHolder.title.setText(model.getShorttext()); 
    mainHolder.note.setText(model.getName()); 
    mainHolder.cardView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      onClick.onItemClick(position); 

     } 
    }); 
    mainHolder.setLongClickListener(new LongClickListener() { 
     @Override 
     public void onItemLongClick(int position) { 
     } 
    }); 
    if (fileNames.get(position).isVisible()) { 
     holder.imageView.setVisibility(View.VISIBLE); 
    } else { 
     holder.imageView.setVisibility(View.GONE); 
    } 
} 

@Override 
public int getItemCount() { 
    return (null != fileNames ? fileNames.size() : 0); 
} 

public void setOnClick(OnItemClicked onClick) { 
    this.onClick = onClick; 
} 

private void showPopUpMenu(final int position, final View view) { 
    final PopupMenu popup = new PopupMenu(context, view); 
    popup.getMenuInflater().inflate(R.menu.custom_popup_menu, popup.getMenu()); 
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
     public boolean onMenuItemClick(MenuItem item) { 
      if (item.getItemId() == R.id.menuLock) { 
       fileNames.get(position).setVisible(true); 
       notifyDataSetChanged(); 
      } else { 
       AlertDialog.Builder alertbox = new AlertDialog.Builder(view.getRootView().getContext()); 
       final EditText input = new EditText(context); 
       alertbox.setView(input); 
       alertbox.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 

        } 
       }); 
       alertbox.setNegativeButton("CANCEL",null); 
       final AlertDialog dialog = alertbox.create(); 
       dialog.show(); 
       dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         String collect = input.getText().toString(); 
         DBhelper dbhelper = new DBhelper(context); 
         String pass = dbhelper.searchpass(collect); 
         if(collect.equals(pass)) 
          { 
           fileNames.get(position).setVisible(false); 
           notifyDataSetChanged(); 
           dialog.dismiss(); 
          } 
         else if (collect.equals("")) 
         { 
          input.setError("Hello"); 
         } 
         else { 
          Toast.makeText(context, "Password does not match", Toast.LENGTH_SHORT).show(); 
          dialog.dismiss(); 
         } 

        } 
       }); 

      } 
      return true; 
     } 
    }); 
    popup.show(); 
} 

public interface OnItemClicked { 
    void onItemClick(int position); 
} 

public class RecycleViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener { 
    public TextView title; 
    public TextView note; 
    public CardView cardView; 
    public ImageView imageView; 
    LongClickListener longClickListener; 

    public RecycleViewHolder(View view) { 
     super(view); 
     this.title = (TextView) view.findViewById(R.id.title); 
     this.note = (TextView) view.findViewById(R.id.note); 
     this.cardView = (CardView) view.findViewById(R.id.card_view); 
     this.imageView = (ImageView) view.findViewById(R.id.lock); 
     imageView.setVisibility(View.INVISIBLE); 
     view.setOnLongClickListener(this); 
    } 

    public void setLongClickListener(LongClickListener lc) { 
     this.longClickListener = lc; 
    } 

    @Override 
    public boolean onLongClick(View v) { 
     showPopUpMenu(getAdapterPosition(), v); 
     this.longClickListener.onItemLongClick(getLayoutPosition()); 
     return false; 
    } 

} 
} 
+0

使用sharedpreference或任何静态变量来保存图像的状态。这样任何你访问你的活动,你看到你的形象在你保存的最后一个状态。 –

+0

你能帮我用我从来没有使用sharedpreference的代码吗? –

回答

0

在上面的代码中,如果列表中隐藏了每个图像,那么显然您必须在列表中保存图像可见性状态。你应该不需要隐藏图像。长时间点击。

FileName中添加新的变量作为布尔等:imagevisibility

加入onBindViewHolder的条件()

if(model.getImageVisibility()) 
{ 
holder.imageView.setVisibility(View.VISIBLE); 
} 
else 
{ 
holder.imageView.setVisibility(View.GONE); 
} 

mainHolder.setLongClickListener(new LongClickListener() { 
     @Override 
     public void onItemLongClick(int position) { 
     } 
    }); 
    if (fileNames.get(position).isVisible()) { 
     FileName model = fileNames.get(position); 
model.setImageVisibility(true); 
    } else { 
     model.setImageVisibility(false); 
    } 
fileNames.set(position,model) 
notifydatasetChanged(); 
} 
+0

cann u排列代码? –

+0

你能告诉我你的适配器代码吗? –

+0

我从来没有与Sharedpreference合作,你可以给我的工作代码..它会帮助我很多 –

相关问题