【问题标题】:List View onItemClick is not working列表视图 onItemClick 不起作用
【发布时间】:2016-01-03 15:45:16
【问题描述】:

我有一个自定义列表视图。列表视图的每一行都包含一个复选框、2 个文本视图和一个图像视图。我一直试图在单击列表视图的任何行时打开另一个活动,但 onItemClick 根本不起作用。

public class SavedAddress2 extends AppCompatActivity implements AdapterView.OnItemClickListener {
    private Toolbar toolbar;
    private ListView listView1;
    List<list_addr> rowitems;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.saved_address2);

        toolbar = (Toolbar) findViewById(R.id.tool_bar3);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayShowHomeEnabled(true);

        rowitems = new ArrayList<list_addr>();

        listView1 = (ListView) findViewById(R.id.addr_list);
        list_addr_adapter adapter = new list_addr_adapter(this,
                R.layout.items_sav_addr2, SavedAddress.rowitems);
        listView1.setAdapter(adapter);
        listView1.setOnItemClickListener(this);
    }

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Intent intent = new Intent(Main.this,Second.class);
        startActivity(intent);
    }

    //...
}

是因为我在列表中有一个复选框吗?因为我对其他列表视图应用了相同的方法,并且它们工作得很好。

【问题讨论】:

  • 把这个属性android:clickable="true"放到xml的listView标签里
  • @TomHehir 你刚才说的都已经处理好了。

标签: android listview onitemclick


【解决方案1】:

尝试将您的复选框设置为不可聚焦,如下所示:

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

希望对你有帮助。

【讨论】:

  • 那行得通。但是在这种情况下,如果我们单击复选框,则不会发生任何事情。你能告诉我一个方法吗?
  • 如果您希望列表项控件具有事件,this 将为您提供帮助。
  • 非常感谢!为我工作:)
【解决方案2】:

在您的布局 xml 中,将此属性添加到根布局

android:descendantFocusability="blocksDescendants"

如果列表视图有按钮或排序焦点在您的情况下的项目上,则它是复选框 并将其添加到复选框

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

【讨论】:

  • 那行得通。但是在这种情况下,如果我们单击复选框,则不会发生任何事情。你能告诉我一个方法吗?
  • 在你的适配器类中设置 onClick 监听器
  • CheckBox 的 onClick 监听器
【解决方案3】:

您传递了错误的类上下文。

Intent 意图 = new Intent(Main.this,Second.class);

开始活动(意图);

你的班级是 SavedAddress2

改成

Intent 意图 = new Intent(SavedAddress2.this,Second.class);

开始活动(意图);

public class SavedAddress2 extends AppCompatActivity implements AdapterView.OnItemClickListener {
    private Toolbar toolbar;
    private ListView listView1;
    List<list_addr> rowitems;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.saved_address2);

        toolbar = (Toolbar) findViewById(R.id.tool_bar3);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayShowHomeEnabled(true);

        rowitems = new ArrayList<list_addr>();

        listView1 = (ListView) findViewById(R.id.addr_list);
        list_addr_adapter adapter = new list_addr_adapter(this,
                R.layout.items_sav_addr2, SavedAddress.rowitems);
        listView1.setAdapter(adapter);
        listView1.setOnItemClickListener(this);
    }

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Intent intent = new Intent(Main.this,Second.class);
        startActivity(intent);
    }

    //...
}

让我知道这是否适合你!:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多