Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我使用gettag时,Listview有时为空_Java_Android_Listview_Android Listview - Fatal编程技术网

Java 当我使用gettag时,Listview有时为空

Java 当我使用gettag时,Listview有时为空,java,android,listview,android-listview,Java,Android,Listview,Android Listview,我在安卓系统中的观点有问题。我使用一个GridView,其中包含项目。每个项目都有名称、按钮、说明和图标。但每个项目也有一个列表视图。单击按钮时,我希望显示链接到该按钮的listview 启动时它可以工作,但当我上下滚动几次时,我的listview要么不显示,要么显示错误的listview 我读过很多其他的问题和文章,但我找不到我做错了什么 我也尝试过类似的方法,但仍然得到相同的结果 if (convertView == null){ holder = new

我在安卓系统中的观点有问题。我使用一个GridView,其中包含项目。每个项目都有名称、按钮、说明和图标。但每个项目也有一个列表视图。单击按钮时,我希望显示链接到该按钮的listview

启动时它可以工作,但当我上下滚动几次时,我的listview要么不显示,要么显示错误的listview

我读过很多其他的问题和文章,但我找不到我做错了什么

我也尝试过类似的方法,但仍然得到相同的结果

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;
    }
模范班

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有时为空,有时为错误的listView

我的目标是填充listview,并在单击按钮时使其可见

我做错了什么

编辑
显然我在其他代码中犯了错误。当listview返回到gone时,我保存了listview。当我想让它再次出现时,它有时会出现错误的列表。因此,适配器实际上没有问题。

请更新您的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.你错过了其他部分 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;
    }
编辑: 我删除了其中的两行代码

armonicaItem.listView = holder.listView;
        harmonicaItem.button = holder.button;

我认为这是不必要的。试着不用它。

多么糟糕的主意(将视图存储在数据项中)编辑:对不起,它是原始代码。你的意思是这是错误的armonicaItem.listView=holder.listView;harmonicaItem.button=holder.button;我尝试了你的代码,但仍然遇到同样的问题
harmonicatem.listView=holder.listView和下一行…我想你添加它作为修复…我知道我复制了问题检查我的编辑代码@SelvinI已经尝试过这样做,但仍然会产生相同的问题是的,我已经尝试过你的答案,但它会给我相同的问题显示你正在使用('v')视图来检索标记。here=>'v.getTag()'()是否将ListView放在ViewHolder中?即使它真的能工作,那也是一个非常糟糕的设计。@shobhan我在gridview上设置了一个onclicklistener。gridview包含HarmonicaItems,您可以将ListHolder作为标记。和获得HarmonicaItem.你能不能定义一下你所说的错误列表视图是什么意思?