android - 在 AppCompatActivity 的 ListView 上选择一个项目

标签 android listview android-appcompat

我有一个 AppCompatActivity。在那里我有一个 ListView 。我想让它在选择一个项目时发生一些事情(另一个 Activity 将触发,但现在我只想进入我可以调用该 Intent 的方法)。

我不知道该怎么做。我看到我可以让我的 AppCompatActivity 实现 AbsListView.OnItemClickListener,它给了我一个方法

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

但是当我运行我的代码并选择一个项目时,它不会进入该方法。 那么有人可以告诉我该怎么做吗?

下面是我的整个 Activity 代码。

public class RouteList extends AppCompatActivity implements AbsListView.MultiChoiceModeListener, AbsListView.OnItemClickListener {
    ArrayList<RouteItem> itemsList;
    ArrayList<String> routeFiles;
    ArrayList<RouteItem> selected;
    RouteListAdapter adapter;

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

        itemsList = new ArrayList<RouteItem>();
        selected = new ArrayList<RouteItem>();

        adapter = new RouteListAdapter(this, R.layout.route_list_item);
        ListView listView = (ListView) findViewById(R.id.routeList);
        listView.setAdapter(adapter);
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
        listView.setMultiChoiceModeListener(this);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setTitle("Routes");
        toolbar.setTitleTextColor(Color.WHITE);
        setSupportActionBar(toolbar);

        getRouteFiles();
        RouteLocationsTask task = new RouteLocationsTask(adapter, routeFiles, getApplicationContext());
        task.execute();
    }

    public void getRouteFiles()
    {
        String path = Environment.getExternalStorageDirectory()+"/LocationTracker/Routes/";

        // Read all files sorted into the values-array
        routeFiles = new ArrayList();
        File dir = new File(path);

        String[] list = dir.list();
        if (list != null) {
            for (String file : list) {
                if (!file.startsWith(".")) {
                    routeFiles.add(file);
                }
            }
        }
        Collections.sort(routeFiles);
    }


    @Override
    public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {

        int x = adapter.getCount();
        RouteItem routeItem = adapter.getItem(position);
        if(checked)
            selected.add(adapter.getItem(position));
        else
            selected.remove(adapter.getItem(position));

        mode.setTitle(String.valueOf(selected.size()));
    }

    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        getMenuInflater().inflate(R.menu.listview_cab_menu, menu);
        return true;
    }

    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return false;
    }

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch(item.getItemId()){
            case R.id.delete:
                itemsList = adapter.getItemList();
                itemsList.removeAll(selected);
                adapter.notifyDataSetChanged();

                deleteSelectedFiles();

                mode.finish();
                return true;
            default:
                return false;
        }
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {
        selected.clear();
    }

    public void deleteSelectedFiles()
    {
        for(RouteItem routeItem : selected)
        {
            File file = new File(routeItem.getFileName());
            file.delete();
        }
    }

    //@Override
    public void onClick(View v) {

    }

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

最佳答案

您需要在 ListView 上调用 setOnItemClickListener 方法才能在 onItemClick 中接收回调。只需将这一行放在 ActivityonCreate 方法中即可。

listView.setOnItemClickListener(this);

关于android - 在 AppCompatActivity 的 ListView 上选择一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34709906/

相关文章:

android - view must have a tag error in android data binding

android - :app:processDebugResources FAILED error when building react-native android

java - 在没有任何数组的情况下在Android中解析JSON数组

android - 如何解决 ListView 滚动缓慢的问题?

Android - StableID 的含义是什么?

ListView 中的 Wpf 组合框绑定(bind)

java - ImageView中的空指针异常

android - 在 res 文件夹的 styles.xml 中找不到应用命名空间

android - 创建android项目时无法写入jarlist缓存文件

Android 的某些 EditText 字段不响应长按(API 30+ with layout_width 0dp)