我的Android视图存在问题。我在其中使用带有项目的GridView。每个项目都有名称,按钮,描述和图标。但每个项目也有一个列表视图。当我点击按钮时,我想显示链接到该按钮的列表视图。
在启动时它可以工作,但是当我向上和向下滚动几次时,我的列表视图要么没有显示,要么显示错误的列表视图。
我已经阅读了很多其他问题和文章,但我找不到我做错的事情。
也尝试了类似的东西,但仍然给出相同的结果
if (convertView == null){
holder = new new ListHolder();
convertView.setTag(holder);
}
else {
holder = (ListHolder) convertView.getTag();
}
getView
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ListHolder holder;
HarmonicaItem harmonicaItem = ((MainActivity) context).getHarmonicaItems().get(position);
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
}
holder = new ListHolder();
holder.logo = (ImageView) row.findViewById(R.id.logo);
holder.line = (TextView) row.findViewById(R.id.line);
holder.button = (Button) row.findViewById(R.id.button);
holder.listView = (ListView) row.findViewById(R.id.subHarmonica);
holder.logo.setImageResource(harmonicaItem.logo);
holder.button.setText(harmonicaItem.title);
holder.button.setOnClickListener(onClickListener);
harmonicaItem.listView = holder.listView;
harmonicaItem.button = holder.button;
holder.listView.setTag(harmonicaItem);
holder.button.setTag(harmonicaItem);
row.setTag(holder);
return row;
}
Model类
static class ListHolder {
ImageView logo;
TextView line;
Button button;
ListView listView;
}
我如何检索项目
@Override
public void onClick(View v) {
HarmonicaItem item = (HarmonicaItem) v.getTag();
}
gridview中项目的布局:
<RelativeLayout
android:id="@+id/buttonLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:gravity="center_vertical|left"
android:paddingLeft="115dp"
android:paddingRight="10dp"
android:text="loop"
android:textColor="@android:color/black"
android:textStyle="bold"/>
<ImageView
android:id="@+id/logo"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp" />
<TextView
android:id="@+id/line"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button"
android:layout_alignBottom="@+id/button"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/logo"
android:text="00:00"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@android:color/black"
android:textStyle="bold"/>
</RelativeLayout>
<ListView
android:id="@+id/subHarmonica"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/buttonLayout"
android:visibility="gone"/>
总结我的问题: item.listView有时为null,有时候列表视图错误。
我的目标是填写列表视图,并在单击按钮时将其显示。
我做错了什么?
显然我在其他代码中犯了一个错误。当listviews重新开始时,我保存了listview。当我希望它再次显示时,它有时会采取错误的列表。所以适配器实际上没有任何问题。
答案 0 :(得分:0)
Plz更新你的getView方法
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
{
holder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
convertView = inflater.inflate(R.layout.list_row, null);
holder.logo = (ImageView) row.findViewById(R.id.logo);
holder.line = (TextView) row.findViewById(R.id.line);
holder.button = (Button) row.findViewById(R.id.button);
holder.listView = (ListView) holder.findViewById(R.id.subHarmonica);
holder.listView.setTag(harmonicaItem);
holder.button.setTag(harmonicaItem);
holder.setTag(holder);
}
else {
holder = (ListHolder)row.getTag();
}
holder.logo.setImageResource(harmonicaItem.logo);
holder.button.setText(harmonicaItem.title);
holder.button.setOnClickListener(onClickListener);
return convertView;
}
答案 1 :(得分:0)
试试这个。您的代码中存在一些问题 你错过了其他部分 2.如果条件
,则需要在内部设置标签@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ListHolder holder;
HarmonicaItem harmonicaItem = ((MainActivity) context).getHarmonicaItems().get(position);
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ListHolder();
holder.logo = (ImageView) row.findViewById(R.id.logo);
holder.line = (TextView) row.findViewById(R.id.line);
holder.button = (Button) row.findViewById(R.id.button);
holder.listView = (ListView) row.findViewById(R.id.subHarmonica);
holder.listView.setTag(harmonicaItem);
holder.button.setTag(harmonicaItem);
row.setTag(holder);
}else{
holder = (ListHolder)row.getTag();
}
holder.logo.setImageResource(harmonicaItem.logo);
holder.button.setText(harmonicaItem.title);
holder.button.setOnClickListener(onClickListener);
return row;
}
修改强> 我删除了2行代码
armonicaItem.listView = holder.listView;
harmonicaItem.button = holder.button;
我认为这不是必需的。试试没有这个。