ListView Android中的OnItemClickListener与OnclickListener [英] OnItemClickListener vs OnclickListener in listview android

查看:76
本文介绍了ListView Android中的OnItemClickListener与OnclickListener的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于代码的原因,这太长了.所以我有一个关于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是间接的"rel =" nofollow noreferrer> <最初在其上声明了 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆