在 OnItemClickListener 上访问适配器内部的图像视图
Accessing imageview inside adapter on OnItemClickListener
我的导航抽屉包含许多项目。每个项目都有不可见的背景图像(id optionbackground
)。我想让图像仅在用户单击该项目时可见。我该怎么做?我要更改其可见性的 ImageView 在 Adapter 中被命名为 optionBackground
。我的 setOnItemClickListener
在 activity 中,我在其中设置导航抽屉的自定义适配器。
Activity
mDrawerList.setAdapter(new CustomAdapter(this, mdrawerTitles));
mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(position==0)
{
...
}
else if(position==1)
{
...
}
}
});
适配器
public class CustomAdapter extends ArrayAdapter
{
private final Context context;
private String[] optionList;
public CustomAdapter(Context context,String[] data)
{
super(context, R.layout.drawer_list_item);
this.context = context;
optionList=data;
}
@Override
public int getCount() {
return optionList.length;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.drawer_list_item, parent, false);
ImageView icon=(ImageView)v.findViewById(R.id.optionlogo);
TextView optiontext=(TextView)v.findViewById(R.id.optiontext);
TextView optionsubtext=(TextView)v.findViewById(R.id.optionsubtext);
ImageView optionBackground=(ImageView)v.findViewById(R.id.optionbackground);
Log.e("bhuvnesh", optionList[position]);
if(optionList[position].equals("ABOUT")) {
optiontext.setText("AB");
icon.setImageResource(R.drawable.g_icon);
optionsubtext.setText("The what");
}
else if(optionList[position].equals("SHAR")) {
optiontext.setText("SHA");
icon.setImageResource(R.drawable.s_icon);
optionsubtext.setText("Tell your ");
}
else if(optionList[position].equals("CONNEC")) {
optiontext.setText("CONN");
icon.setImageResource(R.drawable.fb_icon);
optionsubtext.setVisibility(View.GONE);
}
else if(optionList[position].equals("LOG")) {
optiontext.setText("LOGOUT");
icon.setImageResource(R.drawable.l_icon);
optionsubtext.setVisibility(View.GONE);
}
return v;
}
}
有多种解决方案可以解决这个问题。
您可以通过 view 在 onClickListener
中获取要隐藏/显示的视图
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
view.findViewById(R.id.optionbackground).setVisibility(View.VISIBLE);
...
}
或者您在适配器中定义 onClickListener 并保持这些视图的最终状态。因此,您可以在 onClick 事件中设置可见性。
View v = inflater.inflate(R.layout.drawer_list_item, parent, false);
...
final ImageView optionBackground=(ImageView)v.findViewById(R.id.optionbackground);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
optionBackground.setVisibility(View.VISIBLE);
}
});
...
如果您打算更新到 RecyclerView。此视图不再带有 onItemClickListener,您需要将监听器添加到适配器内的视图。
您仍然可以将它传递给包含的 activity 或片段,正如我在我的一个开源项目中所做的那样:
有关在 Touch 上显示和隐藏它的更多信息
.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//press
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
//unpress
break;
}
// Pass all events through to the host view.
return false;
}
}
dumazy 的方法很好,但还有另一种解决方案。您可以在适配器的 getView 方法中创建 onclick 方法。
这是一个例子
final ImageView optionBackground= (ImageView)v.findViewById(R.id.optionbackground);
v.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
optionBackground.setVisibility(View.VISIBLE);
}
});
在 onItemClick
方法中,您有 view 参数。此参数是 View,它包含您在 CustomAdapter.
中的 getView
方法中膨胀的所有元素
因此,为了完成您想要实现的目标,您只需检索 ImageView 及其 ID 并设置其可见性。
mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
view.getViewById(R.id.optionBackground).setVisibility(View.VISIBLE);
}
});
就是这样。
我的导航抽屉包含许多项目。每个项目都有不可见的背景图像(id optionbackground
)。我想让图像仅在用户单击该项目时可见。我该怎么做?我要更改其可见性的 ImageView 在 Adapter 中被命名为 optionBackground
。我的 setOnItemClickListener
在 activity 中,我在其中设置导航抽屉的自定义适配器。
Activity
mDrawerList.setAdapter(new CustomAdapter(this, mdrawerTitles));
mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(position==0)
{
...
}
else if(position==1)
{
...
}
}
});
适配器
public class CustomAdapter extends ArrayAdapter
{
private final Context context;
private String[] optionList;
public CustomAdapter(Context context,String[] data)
{
super(context, R.layout.drawer_list_item);
this.context = context;
optionList=data;
}
@Override
public int getCount() {
return optionList.length;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.drawer_list_item, parent, false);
ImageView icon=(ImageView)v.findViewById(R.id.optionlogo);
TextView optiontext=(TextView)v.findViewById(R.id.optiontext);
TextView optionsubtext=(TextView)v.findViewById(R.id.optionsubtext);
ImageView optionBackground=(ImageView)v.findViewById(R.id.optionbackground);
Log.e("bhuvnesh", optionList[position]);
if(optionList[position].equals("ABOUT")) {
optiontext.setText("AB");
icon.setImageResource(R.drawable.g_icon);
optionsubtext.setText("The what");
}
else if(optionList[position].equals("SHAR")) {
optiontext.setText("SHA");
icon.setImageResource(R.drawable.s_icon);
optionsubtext.setText("Tell your ");
}
else if(optionList[position].equals("CONNEC")) {
optiontext.setText("CONN");
icon.setImageResource(R.drawable.fb_icon);
optionsubtext.setVisibility(View.GONE);
}
else if(optionList[position].equals("LOG")) {
optiontext.setText("LOGOUT");
icon.setImageResource(R.drawable.l_icon);
optionsubtext.setVisibility(View.GONE);
}
return v;
}
}
有多种解决方案可以解决这个问题。
您可以通过 view 在 onClickListener
中获取要隐藏/显示的视图public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
view.findViewById(R.id.optionbackground).setVisibility(View.VISIBLE);
...
}
或者您在适配器中定义 onClickListener 并保持这些视图的最终状态。因此,您可以在 onClick 事件中设置可见性。
View v = inflater.inflate(R.layout.drawer_list_item, parent, false);
...
final ImageView optionBackground=(ImageView)v.findViewById(R.id.optionbackground);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
optionBackground.setVisibility(View.VISIBLE);
}
});
...
如果您打算更新到 RecyclerView。此视图不再带有 onItemClickListener,您需要将监听器添加到适配器内的视图。
您仍然可以将它传递给包含的 activity 或片段,正如我在我的一个开源项目中所做的那样:
有关在 Touch 上显示和隐藏它的更多信息
.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//press
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
//unpress
break;
}
// Pass all events through to the host view.
return false;
}
}
dumazy 的方法很好,但还有另一种解决方案。您可以在适配器的 getView 方法中创建 onclick 方法。 这是一个例子
final ImageView optionBackground= (ImageView)v.findViewById(R.id.optionbackground);
v.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
optionBackground.setVisibility(View.VISIBLE);
}
});
在 onItemClick
方法中,您有 view 参数。此参数是 View,它包含您在 CustomAdapter.
getView
方法中膨胀的所有元素
因此,为了完成您想要实现的目标,您只需检索 ImageView 及其 ID 并设置其可见性。
mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
view.getViewById(R.id.optionBackground).setVisibility(View.VISIBLE);
}
});
就是这样。