- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的 RecyclerView 中有一个锁定图像,我想在长按时隐藏/显示它。.我想根据它的位置隐藏/显示,就像我在回收站 View 中长按第一个项目并单击隐藏它只会隐藏该项目的图像而不是其他项目我已经尝试过这个我面临的问题仅隐藏/显示最后一个位置项目中的图像。请帮助我在此先感谢。
回收 View 适配器
public class RecycleViewAdapter extends
RecyclerView.Adapter<RecycleViewHolder> {
private List<FileName> fileNames;
private Context context;
private OnItemClicked onClick;
String Name;
RecycleViewHolder mainHolder;
public RecycleViewAdapter(Context context,List<FileName> fileNames) {
this.context = context;
this.fileNames = fileNames;
}
public interface OnItemClicked {
void onItemClick(int position);
}
@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);
mainHolder = (RecycleViewHolder) 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) {
}
});
}
@Override
public int getItemCount() {
return (null != fileNames ? fileNames.size() : 0);
}
public void setOnClick(OnItemClicked onClick)
{
this.onClick=onClick;
}
public void getItemSelected(MenuItem item)
{
if (item.getItemId() == 0) {
mainHolder.imageView.setVisibility(View.VISIBLE);
} else {
mainHolder.imageView.setVisibility(View.INVISIBLE);
}
}
RecyclerViewHolder:
public class RecycleViewHolder extends RecyclerView.ViewHolder implements
View.OnLongClickListener,View.OnCreateContextMenuListener {
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);
view.setOnCreateContextMenuListener(this);
}
public void setLongClickListener(LongClickListener lc)
{
this.longClickListener = lc;
}
@Override
public boolean onLongClick(View v) {
this.longClickListener.onItemLongClick(getLayoutPosition());
return false;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) {
menu.add(0,0,0,"Lock");
menu.add(0,1,0,"UnLock");
}
}
我从谷歌上找到这个来检查 Bindview 上的位置,但我不知道如何在 getItem selected 中实现
if (position == eventsList.size() -1){
holder.profileImage.setVisibility(View.INVISIBLE)
}else{
holder.profileImage.setVisibility(View.VISIBLE)
}
主要 Activity :
public class MainActivity extends AppCompatActivity implements
RecycleViewAdapter.OnItemClicked{
List<FileName> filenames;
DBhelper dBhelper;
SQLiteDatabase sqLiteDatabase;
ListViewAdapter listViewAdapter;
ListView listView;
ImageView lock;
String name,note;
String col;
private static RecyclerView recyclerView;
RecycleViewAdapter recycleViewAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkFirstRun();
//listView = (ListView)findViewById(R.id.lv_filename);
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
lock =(ImageView)findViewById(R.id.lock);
dBhelper = new DBhelper(getApplicationContext());
sqLiteDatabase =dBhelper.getReadableDatabase();
filenames = dBhelper.getItemFromDatabase(sqLiteDatabase);
initViews();
if(filenames != null) {
recycleViewAdapter = new
RecycleViewAdapter(MainActivity.this,filenames);
recyclerView.setAdapter(recycleViewAdapter);
//listViewAdapter = new ListViewAdapter(getApplicationContext(),
R.layout.activity_main, filenames);
//listView.setAdapter(listViewAdapter);
}
recycleViewAdapter.setOnClick(this);
// registerForContextMenu(listView);
/* listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
name = filenames.get(position).getName();
note = filenames.get(position).getShorttext();
Alert();
}
});*/
}
private void initViews() {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
recyclerView.setHasFixedSize(true);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,
StaggeredGridLayoutManager.VERTICAL));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_add:
Intent intent = new Intent(MainActivity.this, Note.class);
startActivity(intent);
return true;
case R.id.action_pass:
Intent i = new Intent(MainActivity.this, ChangePass.class);
startActivity(i);
return true;
case R.id.action_list:
Intent intent2 = new Intent(MainActivity.this, ToDo.class);
startActivity(intent2);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void Alert()
{
View mview = getLayoutInflater().inflate(R.layout.dialog_pass,null);
final EditText mEdittext = (EditText) mview.findViewById(R.id.Epass);
AlertDialog.Builder mBuilder = new AlertDialog.Builder(MainActivity.this);
mBuilder.setView(mview);
mBuilder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
mBuilder.setNegativeButton("Cancel",null);
mBuilder.setCancelable(false);
final AlertDialog dialog = mBuilder.create();
dialog.show();
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
String col = mEdittext.getText().toString();
String password = dBhelper.searchpass(col);
if (col.equals(""))
{
mEdittext.setError("Please fill the blank field");
}
else if (col.equals(password))
{
Intent intent = new Intent(MainActivity.this,Note2.class);
intent.putExtra("Name",name);
intent.putExtra("Note",note);
startActivity(intent);
dialog.dismiss();
}
else {
Toast temp = Toast.makeText(MainActivity.this, "Password does not match", Toast.LENGTH_SHORT);
temp.show();
}
}
});
}
public void checkFirstRun() {
boolean isFirstRun = getSharedPreferences("PREFERENCE", MODE_PRIVATE).getBoolean("isFirstRun", true);
if (isFirstRun){
View view = getLayoutInflater().inflate(R.layout.first_run_dialog,null);
final EditText FirstPass = (EditText) view.findViewById(R.id.Fpass);
final Button submit = (Button)view.findViewById(R.id.ok);
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setCancelable(false);
builder.setView(view);
final AlertDialog dialog1 = builder.create();
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
col = FirstPass.getText().toString();
if (col.equals(""))
{
FirstPass.setError("Please fill the field");
}
else{
savePass();
Toast.makeText(MainActivity.this, "Password Created", Toast.LENGTH_SHORT).show();
dialog1.dismiss();
}
}
});
dialog1.show();
dialog1.setCanceledOnTouchOutside(false);
getSharedPreferences("PREFERENCE", MODE_PRIVATE)
.edit()
.putBoolean("isFirstRun", false)
.apply();
}
}
public void savePass()
{
dBhelper = new DBhelper(this);
sqLiteDatabase= dBhelper.getWritableDatabase();
dBhelper.storePass(col,sqLiteDatabase);
}
@Override
public void onItemClick(int position) {
name = filenames.get(position).getName();
note = filenames.get(position).getShorttext();
Alert();
}
@Override
public boolean onContextItemSelected(MenuItem item) {
recycleViewAdapter.getItemSelected(item);
return super.onContextItemSelected(item);
}
}
我的界面:
public interface LongClickListener {
void onItemLongClick(int position);
}
最佳答案
您需要跟踪适配器中锁定或解锁项目的位置,例如
ArrayList<Integer> lockedItems = new ArrayList<Interger>;
和向其中添加、删除项目。
或者您可以使用 Boolean
你模型中的字段 FileName
实际上,您需要一种方法来识别给定位置的图像是否需要隐藏或显示
如果您知道是否需要在给定位置隐藏/显示,则可以在 onBindViewHolder
中更新 View 喜欢
@Override
public void onBindViewHolder(RecycleViewHolder holder, final int position) {
final FileName model = fileNames.get(position);
RecycleViewHolder recycleViewHolder = (RecycleViewHolder) holder;
recycleViewHolder.title.setText(model.getShorttext());
recycleViewHolder.note.setText(model.getName());
if (model.isLocked()) { // or if (lockedItems.contains(position))
recycleViewHolder.imageView.setVisibility(View.VISIBLE);
} else {
recycleViewHolder.imageView.setVisibility(View.INVISIBLE);
}
已编辑
添加字段 selectedItem
到适配器以跟踪长按的项目位置并在长按时存储项目位置
holder.setLongClickListener(new LongClickListener() {
@Override
public void onItemLongClick(int position) {
selectedItem = position
}
});
并在 getItemSelected
中使用该位置并将其添加到 lockedItemsList
或添加 boolean
FileName
中的字段并更新其值并使用它来了解给定位置的项目是锁定还是解锁。
关于android - 如何根据那里的位置在 RecyclerView 中隐藏/显示 imageview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44213704/
我正在尝试创建一个演示应用程序,我想在其中创建一个 ImageView ,该 ImageView 相互重叠,x 和 y 坐标略有变化(类似于所有纸牌相互重叠的任何纸牌游戏,但我们可以看到数字)。如果用
您好,我有一个要求,我需要通过拖动 ImageView 的右角来调整 ImageView 的大小和旋转 ImageView 。 我可以通过拖动 ImageView 的角成功地调整 ImageView
我目前正在尝试使用 JavaFX 在 ImageView 中居中图像。 所以我在 View 中加载图像: Image img = new Image("..."); imageView.setImag
我有一个非常简单的问题要问:我需要在屏幕右下角的 ImageView 上放一个小 Logo ,整个屏幕都很大,但我不知道如何设置坐标或如何设置说 ImageViews 处于相对位置。 像这样: 最佳答
我想像这样制作一个 ImageView 覆盖另一个 ImageView;只有一半的绿色圆圈覆盖了图像: 我试过使用 RelativeLayout 并将两个 ImageView 都放在里面。然后我使用
我们如何使 ImageView 的宽度和高度等于父 ConstraintLayout 的宽度?所以它显示一个全宽的方形 ImageView。 通常如何设置某个小部件的高度等于其他小部件的宽度? 最佳答
有点像刽子手 如果 ImageView 中有东西,如何跳过 ImageView 并检查其中是否有东西尝试检查 imageView 中是否有图像 代码 final boolean imageT
我正在用 swift 制作一种“保持在线条之间”iPhone 应用程序,我有一个移动 ImageView 和 2 个代表线条的 ImageView 。如何检测移动 ImageView 何时撞击或接触线
我正在做一个应用程序,用户通过单击图像(ImageView1)可以在另一个ImageView2中看到它。所以我尝试在变量中获取 ImageView1 的图像 BufferedImage img= Sw
我有以下看法: 如果我点击任何 ImageButton 以全屏模式显示相应的图像。例如,如果我点击 Black ,它会显示 ImageView ,如: 我还为一些图像按钮将背景设置为全屏颜色:如果我单
我在名为 DialButton2 的类中扩展了 ImageView 类(不要担心类的名称,它无关紧要)。 DialButton2 类所做的只是显示位于可绘制文件夹中的任 Intent 像。 packa
我正在使用 Xcode 8.1 和 swift 3.0 开发应用。 使用 Storyboard ,我扩展了一个 ImageView 以占据整个 View ,并为其设置了一张图片以用作背景图像(使用 s
如何将我的 imageView 裁剪成我在项目中有图像的气泡形状。 最佳答案 以下是调整大小或裁剪图像的简单代码,您只需根据需要为图像传递高度或宽度即可: 获取裁剪图像: UIImage *cropp
我有 92 张图像,我希望有一个指示符(例如复选标记)来指示图像已解锁。我在 .png 文件中有复选标记,我首先尝试的是为每个图像制作单独的副本,并将复选标记放在 Photoshop 中的图像顶部。但
我有两个 ImageView ,它们看起来像这样。我想将 TouchListener 添加到 imageview1。但听众无法正常工作。我正在将 imageview2 添加到 android:foc
我有一个列表布局,其中包含如下所示的项目: 首先有一个 ImageView(灯光),然后是两个 textView。所有这些都在 TableLayout 中。 (来源:http://code.googl
我想知道如何将 ImageView 元素添加到 JavaFx 2.1 中的区域元素。 也许我把这个元素的用法弄错了,但 AFAIK 它也是子元素的容器。 背景是我需要一个定义大小的区域,该区域应显示独
我在调整 StackPane 中的 ImageView 大小时遇到了问题:如果 StackPane 是根容器并且我将图像的高度和宽度绑定(bind)到 StackPane,那么一切都很好。
** 我有两个 ImageView ,一个用于背景,一个用于前景,我正在前景 ImageView 上绘图。对于删除功能,我这样做是因为我不想在删除时删除背景图像。它正在执行很好。现在我想保存该图像(背
我正在尝试为 watch 应用程序创建 ImageView ,我正在尝试以编程方式创建,但经典 View Controller 中使用的代码不起作用。 let imageName = "yourIma
我是一名优秀的程序员,十分优秀!