获取ListView行的id /位置

时间:2017-03-22 11:27:59

标签: android listview android-arrayadapter android-adapterview

我有一个包含大量行的Android ListView。每行包含一个图像和一些文本。如果我单击行的图像,我想执行操作A,如果我单击行中的任何其他位置,我想执行操作B.这两个操作都需要ListView项的id才能工作。

到目前为止,对于操作B,我只使用了listview' JAVA_HOME,其中我从参数中获取了id。但是,据我所知,找出用户单击的行本身中哪个视图的唯一方法是向ImageView添加一个onItemClick事件处理程序,触发操作A.在这种情况下,我只获取被单击的视图 - 不是ImageView所在行的ID。

我的问题是 - 如何从View对象转到获取ListView中父行的id?

5 个答案:

答案 0 :(得分:2)

onItemClickListener方法已经onClick interface传递了viewposition:您可以通过执行{{1}来查看已点击的视图单击特定视图时声明并执行专用操作。

E.g。

switch

How to create listview onItemclicklistener

所示

您会在listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view,int position, long id) { String item = listView.getItemAtPosition(position); Toast.makeText(this,"You selected : " + item,Toast.LENGTH_SHORT).show(); } }); 界面中看到onItemClick作为参数,View view作为参数,使用这两个参数在侦听器内执行操作。就像我之前提到的那样,你可以使用int position语句。

switch

更新:所有功劳归功于How to know which view inside a specific ListView item that was clicked中的wwfloyd

listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
            String item = listView.getItemAtPosition(position);
            switch(view.getId()) {
               case R.id.imageView:
                      //perform action for imageView using the data from Item (if you have used an MVC pattern)
               break;
               // you can do this for any widgets you wish to listen for click actions
            }           
        }
    });
适配器中的

将单击侦听器应用于元素,然后触发接口方法,以便您可以识别已单击的已注册窗口小部件,然后在@Override public View getView(final int position, View convertView, final ViewGroup parent) { // Check if an existing view is being reused, otherwise inflate the view if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.one_line, parent, false); } // This chunk added to get textview click to register in Fragment's onItemClick() // Had to make position and parent 'final' in method definition convertView.findViewById(R.id.someName).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((ListView) parent).performItemClick(v, position, 0); } }); // do stuff... } 中执行:

onItemClick

答案 1 :(得分:1)

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1,
            int position, long id)

在此方法中,View arg1为您提供了Item视图,您可以通过此arg1.findViewById(R.id.content);找到项目内容。这里的位置为您提供列表视图的项目位置

答案 2 :(得分:1)

如果你没有使用标签,那么你可以

SELECT * FROM [REMOTESERVER].localdb.dbo.localtablename;

并在您的自定义int itemId=...; OnClickListener customOnClick=...; imageView.setTag(itemId); imageView.setOnClickListener(customOnClick);

OnClickListener

请注意,您可以将“任意”int itemId = (Integer) view.getTag(); 设置为标记,这样您甚至可以设置整个自定义对象,而不仅仅是id

答案 3 :(得分:0)

您可以从适配器中的getView()方法为一行中的每个视图设置单击侦听器。

答案 4 :(得分:0)

你可以在listview适配器的getView()方法中实现它。