ListView Android中的OnItemClickListener与OnclickListener [英] OnItemClickListener vs OnclickListener in listview android
问题描述
由于代码的原因,这太长了.所以我有一个关于OnItemclickListener和OnclickListener的问题,在这里我有两个代码,每个代码都起作用,因此是否有使用这两个代码中的任何一个的偏好?这是OnItemClickListener的代码
This is gonna be long due to code. So I have a question about OnItemclickListener vs OnclickListener,and here I have two codes one for each and both worked, so is there any preference to use one of the two or can I use anyone??? Here is code with OnItemClickListener
public class MainActivity extends AppCompatActivity {
private ArrayList<String> numbers=new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //a listview with id "list"
ListView numberLV = (ListView) findViewById(R.id.list);
numbers.add("one");
numbers.add("two");
numbers.add("three");
numbers.add("four");
// and so on
listAdapter itemadapter=new listAdapter(this,numbers);
numberLV.setAdapter(itemadapter);
numberLV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String num=numbers.get(position);
String display="You have clicked "+num;
Toast.makeText(MainActivity.this,display,Toast.LENGTH_SHORT).show();
}
});
}
}
class listAdapter extends ArrayAdapter<String> {
public listAdapter(@NonNull Context context, ArrayList<String> numbers){
super(context,0,numbers);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View listItemView = convertView;
if(listItemView == null) {
listItemView = LayoutInflater.from(getContext()).inflate(
R.layout.list_num, parent, false);
}
TextView tvnum=(TextView) listItemView.findViewById(R.id.numbersTV);
String num=getItem(position);
tvnum.setText(num);
return listItemView;
}
}
这是与OnClickListener一起使用的
and here's one with OnClickListener
public class MainActivity extends AppCompatActivity {
private ArrayList<String> numbers=new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //a listview with id "list"
ListView numberLV = (ListView) findViewById(R.id.list);
numbers.add("one");
numbers.add("two");
numbers.add("three");
numbers.add("four");
// and so on
listAdapter itemadapter=new listAdapter(this,numbers);
numberLV.setAdapter(itemadapter);
}
}
class listAdapter extends ArrayAdapter<String> {
public listAdapter(@NonNull Context context, ArrayList<String> numbers){
super(context,0,numbers);
}
@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View listItemView = convertView;
if(listItemView == null) {
listItemView = LayoutInflater.from(getContext()).inflate(
R.layout.list_num, parent, false);
}
TextView tvnum=(TextView) listItemView.findViewById(R.id.numbersTV);
String num=getItem(position);
tvnum.setText(num);
listItemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String display="You have clicked "+getItem(position);
Toast.makeText(getContext(),display,Toast.LENGTH_SHORT).show();
}
});
return listItemView;
}
}
这两个代码对我来说都正常工作,但困惑之处在于第二个代码是对还是错??
Both codes worked normally for me, but the confusion was whether the second one was right or wrong??
推荐答案
适配器
如上面第一条评论所述, setOnItemClickListener
是将单击侦听器附加到适配器项上的首选方法.
Adapter
The setOnItemClickListener
is the preferred way of attaching the click listener on the items of the adapter as mentioned by the first comment above.
在第二种情况下,您在 getView
方法内的单个项目上附加了 setOnClickListener
,这也是有效的,因为在这种情况下,ItemView是间接的 setOnClickListener
的code> View .
In your second scenario, where you have setOnClickListener
attached on individual item inside the getView
method which is also valid because the ItemView in this case is an indirect subclass on View
on which setOnClickListener
originally declared.
这篇关于ListView Android中的OnItemClickListener与OnclickListener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!