如何知道单击的特定ListView项中的哪个视图

Hen*_*rik 14 android listview adapter

我有一个ListView自己的自定义适配器派生自BaseAdapter.ListView有子项中的每个项目,如ImageViewTextView.

如何知道用户点击了哪些子项?getView例如,是否可以在函数中附加一个侦听器,或者这可能是一个问题?

/亨利克

编辑:目前我onItemClick在Activity中包含了一个ListView.有没有什么好的方法可以通过检查列表中的参数来了解ListView中特定项目中的哪个子项目onItemClick.

@Override 
public void onItemClick(AdapterView<?> a, View v, int pos, long id) {
.
.
}
Run Code Online (Sandbox Code Playgroud)

wwf*_*oyd 11

我使用了Miga的Hobby Programming的想法.

关键是从新的onClick侦听器调用performItemClick().这会将点击通过传递给已经用于列表视图的onItemClick().这是如此快速和简单,我觉得我在作弊.

这是来自列表适配器的getView():

@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...
}
Run Code Online (Sandbox Code Playgroud)

而onItemClick():

@Override
public void onItemClick(AdapterView adapterView, View view, int position, long id) {

    long viewId = view.getId();

    if (viewId == R.id.someName) {
        Toast.makeText(getActivity(), "someName item clicked", Toast.LENGTH_SHORT).show();
    }
    else {
        Toast.makeText(getActivity(), "ListView clicked: " + id, Toast.LENGTH_SHORT).show();

   }
}
Run Code Online (Sandbox Code Playgroud)


gwv*_*eri 5

你能行的。您需要修改getView方法:

@Override
public View getView(final int position, View row, final ViewGroup parent) {
    ...     
    YourWrapper wrapper = null;
    if (row == null) {
        row = getLayoutInflater().inflate(R.layout.your_row, parent, false);
        wrapper = new YourWrapper(row);
        row.setTag(wrapper);
    } else {
        wrapper = (YourWrapper) row.getTag();
    }

    wrapper.yourSubView.setOnClickListener(new View.OnClickListener()   
    {               
    @Override
    public void onClick(View v) {
        // do something
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)