首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android ListView 點擊事件無法取得位置:缺少 setOnItemClickListener 綁定

     編輯:程式設計綜合問答

問題代碼分析

原始碼中 MainActivity 繼承 ListActivity 並實作 OnItemClickListener,但在 onCreate 中**未呼叫** list.setOnItemClickListener(this),導致點擊無反應。且同時存在自訂 ListView(findViewById(R.id.list))與 ListActivity 內建 ListView,造成雙重綁定混淆。

修正方案:統一使用自訂 ListView + 正確綁定

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
    private ListView listView;
    private CoverLetterAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.coverletterselection);

        listView = findViewById(R.id.list);
        adapter = new CoverLetterAdapter(this, coverLetterTitles);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(this); // 關鍵:綁定監聽器
    }

    @Override
    public void onItemClick(AdapterView parent, View view, int position, long id) {
        String item = (String) parent.getItemAtPosition(position);
        Log.d("Click", "position=" + position + ", item=" + item);
        // 業務邏輯...
    }
}

Adapter 簡化建議

  • 使用 ArrayAdapter 或 RecyclerView 替代自訂 BaseAdapter,減少樣板代碼。
  • ViewHolder 模式正確,但 convertView 重用邏輯中 setTag/getTag 順序應調整:先 findViewById 再 setTag,避免重複查找。

常見坑點檢查表

  1. 是否呼叫 setOnItemClickListener?
  2. ListView 是否被其他 View(如透明層)遮擋?
  3. Item 布局中是否有 android:focusable="true" 子元素搶奪焦點?
  4. 是否在 onCreate 而非 onResume 綁定?
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved