Android CustomListView onItemClickListener在使用HorizontalScrollView时不工作,无限调用getView()方法

Android CustomListView onItemClickListener在使用HorizontalScrollView时不工作,无限调用getView()方法,android,android-layout,android-listview,horizontalscrollview,custom-adapter,Android,Android Layout,Android Listview,Horizontalscrollview,Custom Adapter,我正在使用以下代码。 Adapter.java类 public class Adapter extends ArrayAdapter<String> { private java.util.List<String> List; private Context context; public Adapter(List<String> list, Context ctx) { super(ctx, R.layout.row_

我正在使用以下代码。 Adapter.java类

public class Adapter extends ArrayAdapter<String> {
    private java.util.List<String> List;
    private Context context;
    public Adapter(List<String> list, Context ctx) {
        super(ctx, R.layout.row_item, list);
        this.List = list;
        this.context = ctx;
    }
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        NameHolder holder = new NameHolder();
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.row_item, null);
            TextView tv = (TextView)v.findViewById(R.id.textView1);
            LinearLayout ll = (LinearLayout) v.findViewById(R.id.myLayout);
            holder.topic_name = tv;
            holder.myLayout = ll;

            v.setTag(holder);
        }
        else
            holder = (NameHolder) v.getTag();
       String topic = List.get(position);
       holder.topic_name.setText(topic);    
       ImageView imgUsers = new ImageView(context);
       imgUsers.setImageResource(R.drawable.ic_launcher);
       holder.myLayout.addView(imgUsers);
       return v;
    }

    private static class NameHolder {
       public TextView topic_name;
       public LinearLayout myLayout;
    }
}
公共类适配器扩展了ArrayAdapter{
私有java.util.List;
私人语境;
公共适配器(列表,上下文ctx){
超级(ctx,R.layout.row_项目,列表);
this.List=List;
this.context=ctx;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=转换视图;
姓名持有者=新姓名持有者();
if(convertView==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
v=充气机充气(R.layout.row_项目,空);
TextView tv=(TextView)v.findViewById(R.id.textView1);
LinearLayout ll=(LinearLayout)v.findViewById(R.id.myLayout);
holder.topic_name=tv;
holder.myLayout=ll;
v、 setTag(支架);
}
其他的
holder=(NameHolder)v.getTag();
字符串主题=List.get(位置);
holder.topic_name.setText(主题);
ImageView imgUsers=新的ImageView(上下文);
imgUsers.setImageResource(R.drawable.ic_启动器);
holder.myLayout.addView(imgUsers);
返回v;
}
私有静态类名称持有者{
公共文本视图主题名称;
公共线路布局我的布局;
}
}
MainActivity.java类:

public class MainActivity extends Activity {
    ListView lv;
    ArrayList<String> list;
    Adapter myAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView)findViewById(R.id.listView1);
        list = new ArrayList<String>();
        for(int i=0; i<10;i++){
            list.add("Name"+i);
        }
        myAdapter = new Adapter(list, MainActivity.this);
        lv.setAdapter(myAdapter);
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                Toast.makeText(MainActivity.this,"lets see"+list.get(arg2), Toast.LENGTH_SHORT).show();
            }
        });
    }
}
公共类MainActivity扩展活动{
ListView lv;
数组列表;
适配器myAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView)findViewById(R.id.listView1);
列表=新的ArrayList();
对于(int i=0;i
现在,预期的输出是每个listItem中的一个图像,它趋于无限。 而且监听器也不能正常工作。 此外,如果我们不添加
水平滚动视图
,则
onItemClickListener
也可以工作。 在适配器本身中编写
onClickListener()
,帮助不大,因为它的工作方式不可预测。 另外,在
getView()
中添加print语句并在Logcat中观察时,我发现很难理解调用
getView()
的模式。
这些是我面临的问题。我需要一个我希望应用的工作代码。提前感谢。

看起来您每次都在这里添加ImageView

ImageView imgUsers = new ImageView(context);
imgUsers.setImageResource(R.drawable.ic_launcher);
holder.myLayout.addView(imgUsers);

为什么不将ImageView作为列表项布局的一部分?

我希望在我真正的应用程序中添加随机数量的图像(在每个列表项中),使应用程序成为动态的。此外,如果我们添加大约10个图像,并使用水平滚动视图,onItemClickListener()仍然不起作用。此外,如果我这样做:if(!check.contains)(List.get(position)){imgUsers.setImageResource(R.drawable.ic_启动器);holder.myLayout.addView(imgUsers);check.add(List.get(position));}where check包含我插入图像的列表项的名称,但它仍然不起作用并给出随机结果。但我仍然无法单击水平滚动视图所在的部分。同样的问题:
// Replace this code 
public View getView(int position, View convertView, ViewGroup parent) {
        NameHolder holder;
        if (convertView == null) {
            holder = new NameHolder();
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.row_item, null);
            holder.topic_name = (TextView)convertView.findViewById(R.id.textView1);
            holder.myLayout = (LinearLayout) convertView.findViewById(R.id.myLayout);

            convertView.setTag(holder);
        }
        else
            holder = (NameHolder) convertView.getTag();

        String topic = List.get(position);
        holder.topic_name.setText(topic);
        ImageView imgUsers = new ImageView(context);
        imgUsers.setImageResource(R.drawable.ic_launcher);
        holder.myLayout.removeAllViews();
        holder.myLayout.addView(imgUsers);
        convertView.setTag(holder);
        return convertView;
    }
ImageView imgUsers = new ImageView(context);
imgUsers.setImageResource(R.drawable.ic_launcher);
holder.myLayout.addView(imgUsers);
// Replace this code 
public View getView(int position, View convertView, ViewGroup parent) {
        NameHolder holder;
        if (convertView == null) {
            holder = new NameHolder();
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.row_item, null);
            holder.topic_name = (TextView)convertView.findViewById(R.id.textView1);
            holder.myLayout = (LinearLayout) convertView.findViewById(R.id.myLayout);

            convertView.setTag(holder);
        }
        else
            holder = (NameHolder) convertView.getTag();

        String topic = List.get(position);
        holder.topic_name.setText(topic);
        ImageView imgUsers = new ImageView(context);
        imgUsers.setImageResource(R.drawable.ic_launcher);
        holder.myLayout.removeAllViews();
        holder.myLayout.addView(imgUsers);
        convertView.setTag(holder);
        return convertView;
    }