如何在列表视图中单击后启动特定的新 activity
How to start a specific new activity upon click in listview
我想创建一个包含 100 多个 entries/activities 的列表。单击列表中的任何条目后,应该会打开一个 activity,我设法做到了,如下所示:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(position==0){
Intent intent0 = new Intent(view.getContext(), first.class);
startActivityForResult(intent0,0);
}
else if(position==1){
Intent intent1 = new Intent(view.getContext(), second.class);
startActivityForResult(intent1,0);
}
但为了更轻松地浏览列表,我通过以下方式按字母顺序对列表进行了排序:
Collections.sort(ListOfObjects, new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return o1[0].compareToIgnoreCase(o2[0]);
}
});
这会导致问题,即在单击一个条目时,无论是哪个条目,都会打开链接到该位置的 activity,但不会打开链接到该条目的 activity。
所以我的问题是如何根据条目的点击 entry/name 而不是根据条目的位置打开特定的 activity?
我很乐意提供任何帮助。
其余代码:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView listView = findViewById(R.id.Objektliste);
searchView = findViewById(R.id.Searchview);
final ArrayList<String[]> ListOfObjects = new ArrayList<>();
arrayAdapter = new ArrayAdapter<String[]>(this, android.R.layout.simple_list_item_2, android.R.id.text1, ListOfObjects){
// Code for subitem
@Override
public View getView(int position, View convertView, ViewGroup parent){
View view = super.getView(position, convertView, parent);
String[] entry = ListOfObjects.get(position);
TextView text1 = view.findViewById(android.R.id.text1);
TextView text2 = view.findViewById(android.R.id.text2);
text1.setText(entry[0]);
text2.setText(entry[1]);
return view;
}
};
listView.setAdapter(arrayAdapter);
//a searchbar/filter which doesnt work either but thats for another day
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
arrayAdapter.getFilter().filter(newText);
return false;
}
});
//Items and subitems put into my list
ListOfObjects.add(new String[] {"first", "first1"});
ListOfObjects.add(new String[] {"second","second1"});
ListOfObjects.add(new String[] {"third","third1"});
//and so on
//sort
Collections.sort(ListOfObjects, new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return o1[0].compareToIgnoreCase(o2[0]);
}
});
//onClick
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(position==0){
Intent intent0 = new Intent(view.getContext(), first.class);
startActivityForResult(intent0,0);
}
else if(position==1){
Intent intent1 = new Intent(view.getContext(), second.class);
startActivityForResult(intent1,0);
}
else if(position==2){
Intent intent2 = new Intent(view.getContext(), third.class);
startActivityForResult(intent2,0);
}
else if(position==3){
Intent intent3 = new Intent(view.getContext(), fourth.class);
startActivityForResult(intent3,0);
}
}
});
}
}
如何在意图中添加额外内容?
Intent intent = new Intent(context, Activity.class);
intent.putExtra("position", position);
startActivityForResult(intent, 0);
如果这样开始activity,你可以处理仓位:
intent.getIntExtra("position", 0);
ListOfObjects 是适配器用来填充视图的 ArrayList。所以在 setOnItemClickListener 中你可以简单地使用:
if(ListOfObjects.get(position)[0].equals("first")){
// start fist activity
}
if(ListOfObjects.get(position)[0].equals("second")){
// start second activity
}
我想创建一个包含 100 多个 entries/activities 的列表。单击列表中的任何条目后,应该会打开一个 activity,我设法做到了,如下所示:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(position==0){
Intent intent0 = new Intent(view.getContext(), first.class);
startActivityForResult(intent0,0);
}
else if(position==1){
Intent intent1 = new Intent(view.getContext(), second.class);
startActivityForResult(intent1,0);
}
但为了更轻松地浏览列表,我通过以下方式按字母顺序对列表进行了排序:
Collections.sort(ListOfObjects, new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return o1[0].compareToIgnoreCase(o2[0]);
}
});
这会导致问题,即在单击一个条目时,无论是哪个条目,都会打开链接到该位置的 activity,但不会打开链接到该条目的 activity。 所以我的问题是如何根据条目的点击 entry/name 而不是根据条目的位置打开特定的 activity? 我很乐意提供任何帮助。
其余代码:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView listView = findViewById(R.id.Objektliste);
searchView = findViewById(R.id.Searchview);
final ArrayList<String[]> ListOfObjects = new ArrayList<>();
arrayAdapter = new ArrayAdapter<String[]>(this, android.R.layout.simple_list_item_2, android.R.id.text1, ListOfObjects){
// Code for subitem
@Override
public View getView(int position, View convertView, ViewGroup parent){
View view = super.getView(position, convertView, parent);
String[] entry = ListOfObjects.get(position);
TextView text1 = view.findViewById(android.R.id.text1);
TextView text2 = view.findViewById(android.R.id.text2);
text1.setText(entry[0]);
text2.setText(entry[1]);
return view;
}
};
listView.setAdapter(arrayAdapter);
//a searchbar/filter which doesnt work either but thats for another day
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
arrayAdapter.getFilter().filter(newText);
return false;
}
});
//Items and subitems put into my list
ListOfObjects.add(new String[] {"first", "first1"});
ListOfObjects.add(new String[] {"second","second1"});
ListOfObjects.add(new String[] {"third","third1"});
//and so on
//sort
Collections.sort(ListOfObjects, new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return o1[0].compareToIgnoreCase(o2[0]);
}
});
//onClick
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(position==0){
Intent intent0 = new Intent(view.getContext(), first.class);
startActivityForResult(intent0,0);
}
else if(position==1){
Intent intent1 = new Intent(view.getContext(), second.class);
startActivityForResult(intent1,0);
}
else if(position==2){
Intent intent2 = new Intent(view.getContext(), third.class);
startActivityForResult(intent2,0);
}
else if(position==3){
Intent intent3 = new Intent(view.getContext(), fourth.class);
startActivityForResult(intent3,0);
}
}
});
}
}
如何在意图中添加额外内容?
Intent intent = new Intent(context, Activity.class);
intent.putExtra("position", position);
startActivityForResult(intent, 0);
如果这样开始activity,你可以处理仓位:
intent.getIntExtra("position", 0);
ListOfObjects 是适配器用来填充视图的 ArrayList。所以在 setOnItemClickListener 中你可以简单地使用:
if(ListOfObjects.get(position)[0].equals("first")){
// start fist activity
}
if(ListOfObjects.get(position)[0].equals("second")){
// start second activity
}