Android CustomListView onItemClickListener在使用HorizontalScrollView时不工作,无限调用getView()方法
我正在使用以下代码。 Adapter.java类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_
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;
}