我有一个 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
中接收回调。只需将这一行放在 Activity
的 onCreate
方法中即可。
listView.setOnItemClickListener(this);
关于android - 在 AppCompatActivity 的 ListView 上选择一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34709906/