单击ListView的列表项没有响应

7

我正在代码中实现ListView。但是当我点击这些项目时,它没有任何响应。请问有人能帮我吗?谢谢提前。

以下是代码。

public class ListaActivity extends Activity {

    public final static String EXTRA_MESSAGE = "com.example.provacomunicazione.MESSAGE";
    @Override
    public void onCreate(Bundle savedInstanceState)  {
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.lsta);
        Resources res = getResources();
        String[] Authors = res.getStringArray(R.array.Lista_Nomi_E_Cognomi_Autori);
        ArrayList<String> Autori = new ArrayList<String>();
        for (String temp:Authors) {
            Autori.add(temp);
        }
        Collections.sort(Autori);
        ArrayList<String> AutoriLetteraSelezionata = new ArrayList<String>();
        for (String temp:Autori) {
            if (temp.charAt(0)=='A') {
                AutoriLetteraSelezionata.add(temp);
            }
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.textviewitem, AutoriLetteraSelezionata);
        ListView listView = (ListView) findViewById(R.id.listView1);
        listView.setAdapter(adapter);
        listView.setClickable(true);
        listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

            CharSequence autore = "("+((TextView)view).getText()+")";

            Intent i = new Intent(ListaActivity.this, SecondaryActivity.class);
            i.putExtra(EXTRA_MESSAGE, autore);
            startActivity(i);  
        });
    }
}    

你应该移除这行代码:listView.setClickable(true); - moh.sukhni
谢谢,但我已经尝试过了,它不起作用。无论如何,你是对的,它很有用。 - Domenico Pacecca
3个回答

38

您应该在列表视图中的所有子对象(如TextView、ImageView等)上进行定义:

android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"

对于根部项 RelativeLayout / LinearLayout等,请定义:

android:clickable="false"
android:descendantFocusability="blocksDescendants"
android:focusable="false"
android:focusableInTouchMode="false"

如果你不定义它们,它们将“捕捉”点击事件。 如果您有自定义的listView适配器,请检查您是否覆盖了:


如果您不定义这些内容,它们将拦截点击事件。如果您使用自定义的列表视图适配器,请确保您已经覆盖这些内容:
@Override
public boolean isEnabled(int position)
{
    return true;
}

1
哇,我有另一个自定义适配器,其中点击正常工作,但是其他列表需要这个才能工作。很奇怪,但很高兴它起作用了:D - Aman Alam
我正在使用带有CardView的自定义ListView。但是ListView的点击事件无法正常工作。 - Sathish Gadde
谢谢您的回答,我只是在子项上删除了“onclik true”并且它起作用了。 - Samir

2
在我的情况下,问题实际上是一个ListView包含了HorizontalScrollView。
HSV会消耗掉项目上的点击事件,并且不会将OnItemClick返回给ListView。
当我在适配器中编写了一个OnClickListener并返回到ListView的回调时,解决了这个问题。在这里查看: https://dev59.com/o1_Va4cB1Zd3GeqPW8zE#43653085

-3
在客户项目中, 设置每个元素
android:clickable="true"
android:focusable="false"

对我来说可行


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接