【发布时间】:2016-12-02 17:36:50
【问题描述】:
如何将图像资源 ID 传递给我的自定义适配器?我在名为 routedetails 的活动中有一个复选框。当复选框被选中时,我想在列表视图中的该项目旁边显示一个复选标记。但要做到这一点,我需要将 imageId 传递给自定义适配器。我试着用 putExtra 的意图来做。但这不起作用。
这是我的带有复选框代码的 RouteDetails.java
public class RouteDetails extends AppCompatActivity {
ImageView routeImage;
String routeName;
CheckBox routeCheckBox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_route_details);
//back button for route details view
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
///////checkbox///////////////////////////////////////////
routeCheckBox = (CheckBox) findViewById(R.id.routeCheckBox);
////// final ImageView checkImageView = (ImageView) findViewById(R.id.checkImageView);
routeCheckBox.setOnClickListener(new View.OnClickListener() {
public void onClick(View view)
{
if (routeCheckBox.isChecked())
{
//checkImageView.setImageResource(R.drawable.checkmark);
Intent check = new Intent(RouteDetails.this,CustomAdapter.class);
check.putExtra("checkImageResource", R.drawable.checkmark);
startActivity(check);
/////////////////////////////////////////////
//sets actionbar title
routeName = getIntent().getExtras().getString("routeName");
getSupportActionBar().setTitle(routeName);
//TextView for route details
final TextView routeDetailsView = (TextView) findViewById(R.id.routeDetailsView);
routeDetailsView.setText(getIntent().getExtras().getCharSequence("route"));
//ImageView for route details
routeImage = (ImageView) findViewById(R.id.routeImage);
final int mImageResource = getIntent().getIntExtra("imageResourceId", 0);
routeImage.setImageResource(mImageResource);
这是自定义适配器
class CustomAdapter extends ArrayAdapter<CharSequence>{
public CustomAdapter(Context context, CharSequence[] routes) {
super(context, R.layout.custom_row ,routes);
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater routeInflater = LayoutInflater.from(getContext());
View customView = convertView;
if(customView == null){customView = routeInflater.inflate(R.layout.custom_row, parent, false);}
CharSequence singleRoute = getItem(position);
TextView routeText = (TextView) customView.findViewById(R.id.routeText);
routeText.setText(singleRoute);
////////trying to set checkmark/////
ImageView checkImageView = (ImageView) customView.findViewById(R.id.checkImageView);
checkImageView.setImageResource(((Activity) getContext()).getIntent().getIntExtra("checkImageResource",0));
////////////////////////////////////////
return customView;
}
这是我的主要活动中使用的适配器
list view with xml array of routes
final CharSequence[] routeListViewItems = getResources().getTextArray(R.array.routeList);
//custom adapter for list view
ListAdapter routeAdapter = new CustomAdapter(this, routeListViewItems);
final ListView routeListView = (ListView) findViewById(R.id.routeListView);
routeListView.setAdapter(routeAdapter);
任何帮助将不胜感激
【问题讨论】:
-
在运行代码时粘贴您的日志猫错误
-
今晚晚些时候我才能做到这一点,我现在离开我的电脑了。但它说 customAdapter 不是一个活动,所以我不能使用这行代码: checkImageView.setImageResource(((Activity) getContext()).getIntent().getIntExtra("checkImageResource",0));我不知道我是否在正确的轨道上尝试做我正在做的事情。有没有更简单的方法?
-
这正是我想强调的一点。您不能在非 actvitvy 类上调用 startactivity() 方法。您可以查看此tutorial。我猜这就是你想要做的。
-
谢谢。 Listviewcheckbox 并不是我想要的。我会尝试更好地解释。当您单击列表视图项目时,它会打开一个新活动。在新活动中有一个复选框。当我选中该框然后单击后退按钮时,我想要一个复选标记图像来显示该列表视图项的 Nex。我在每个列表视图行中放置了一个图像视图。我希望能够根据复选框控制图像
-
单击详细信息页面后,是否要在列表项上设置复选标记?或者详细信息页面会决定在列表中使用哪种图像?
标签: android listview android-intent custom-adapter