Java 如何创建Listview,以便单击每个列表项将打开不同的活动?

Java 如何创建Listview,以便单击每个列表项将打开不同的活动?,java,android,listview,Java,Android,Listview,我有一个列表视图。我想点击每个列表项,它会打开不同的活动。实际上,我写了代码,但它不起作用。我的编码技能无法处理这个问题。如何使用字符串和类对创建一个Hahmap,然后将其放入ArrayAdapter。谁能告诉我密码吗 ListViewAcivity.java import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import

我有一个列表视图。我想点击每个列表项,它会打开不同的活动。实际上,我写了代码,但它不起作用。我的编码技能无法处理这个问题。如何使用字符串和类对创建一个Hahmap,然后将其放入ArrayAdapter。谁能告诉我密码吗

ListViewAcivity.java

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;

public class ListViewActivity extends Activity {
    ListView listView ;

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

        // Get ListView object from xml
        listView = (ListView) findViewById(R.id.list);

        // Defined Array values to show in ListView
        HashMap<String, Class> hashMap=new HashMap<String, Class>();


         hashMap.put("A Function", MActivity.class);
         hashMap.put("B Function",AActivity.class);
         hashMap.put("c Function",XActivity.class);
         hashMap.put("D Function",ZActivity.class);
         hashMap.put("E Function", PActivity.class);
         hashMap.put("F Function", QActivity.class);


        // Define a new Adapter
        // First parameter - Context
        // Second parameter - Layout for the row
        // Third parameter - ID of the TextView to which the data is written
        // Forth - the Array of data
导入android.app.Activity;
导入android.content.Intent;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.Toast;
导入java.util.ArrayList;
导入java.util.HashMap;
公共类ListViewActivity扩展活动{
列表视图列表视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main\u屏幕\u活动);
//从xml获取ListView对象
listView=(listView)findViewById(R.id.list);
//要在ListView中显示的已定义数组值
HashMap HashMap=新的HashMap();
put(“函数”,MActivity.class);
put(“B函数”,aaactivity.class);
put(“c函数”,XActivity.class);
put(“D函数”,ZActivity.class);
put(“E函数”,PActivity.class);
put(“F函数”,QActivity.class);
//定义一个新适配器
//第一个参数-上下文
//第二个参数-行的布局
//第三个参数-写入数据的TextView的ID
//第四,数据数组
//这里有错误……//无法解决此构造函数//我不知道如何使用//字符串、类对和数组适配器

  ArrayAdapter<HashMap<String,Class>> adapter = new ArrayAdapter<HashMap<String,Class>>(this, android.R.layout.simple_list_item_1, android.R.id.text1, hashMap);


        // Assign adapter to ListView
        listView.setAdapter(adapter);

        // ListView Item Click Listener
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

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

                // ListView Clicked item index
                int itemPosition     = position;

                // ListView Clicked item value
                String  itemValue    = (String) listView.getItemAtPosition(position);
                switch(itemPosition){
                    case 0:  Intent newActivity = new Intent(ListViewActivity.this, MActivity.class);
                        startActivity(newActivity);
                        break;
                    case 1:  Intent newActivity1 = new Intent(ListViewActivity.this, AActivity.class);
                        startActivity(newActivity1);
                        break;
                    case 2:  Intent newActivity2 = new Intent(ListViewActivity.this, XActivity.class);
                        startActivity(newActivity2);
                        break;
                    case 3:  Intent newActivity3 = new Intent(ListViewActivity.this, ZActivity.class);
                        startActivity(newActivity3);
                        break;
                    case 4:  Intent newActivity4 = new Intent(ListViewActivity.this, PActivity.class);
                        startActivity(newActivity4);
                        break;
                    case 5:  Intent newActivity5 = new Intent(ListViewActivity.this, QActivity.class);
                        startActivity(newActivity5);
                        break;


                }

            }
            @SuppressWarnings("unused")
            public void onClick(View v){
            };
        });}
}
ArrayAdapter adapter=新的ArrayAdapter(这个,android.R.layout.simple_list_item_1,android.R.id.text1,hashMap);
//将适配器分配给ListView
setAdapter(适配器);
//ListView项目单击侦听器
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//ListView单击的项目索引
int itemPosition=位置;
//ListView单击的项目值
String itemValue=(String)listView.getItemAtPosition(position);
开关(位置){
案例0:Intent newActivity=newintent(ListViewActivity.this,MActivity.class);
星触觉(新活动);
打破
案例1:Intent newActivity1=新的Intent(ListViewActivity.this,aaActivity.class);
startActivity(新活动1);
打破
案例2:Intent newActivity2=新的Intent(ListViewActivity.this,xaActivity.class);
startActivity(新活动2);
打破
案例3:Intent newActivity3=新Intent(ListViewActivity.this,zaActivity.class);
startActivity(新活动3);
打破
案例4:Intent newActivity4=新Intent(ListViewActivity.this,PActivity.class);
startActivity(新活动4);
打破
案例5:Intent newActivity5=新的Intent(ListViewActivity.this,QActivity.class);
startActivity(新活动5);
打破
}
}
@抑制警告(“未使用”)
公共void onClick(视图v){
};
});}
}
主屏幕\u Activity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
<ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"></ListView>

</LinearLayout>

An需要显示对象的数组或列表。因此,您需要提供一个数组/列表

是什么让您认为它可以处理地图?列表/数组表示事物的序列;而地图代表的是从某种东西到另一种东西的映射

换句话说:您不能传递贴图对象

只需传递包含要显示的字符串的列表或数组(“医疗提醒”、…)

但拥有这张地图是有价值的;您只需稍微更改一下代码:

首先,在创建ArrayAdapter时,可以使用贴图的键作为输入,如下所示:

List<String> arrayItems = new ArrayList<>(hashMap.keySet());

您所要求的功能的简单静态示例

public class MainActivity extends AppCompatActivity {

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

        //Initialize the list view
        lv1 = (ListView) findViewById(R.id.mainlist);

        //Add the List data
        //as the array is stored starting with 0, the Layouts will be having 0th position, Intents being 1 and so on..
        String[] sessiontuts = new String[]{"Activity 1", "Activity2"};

        //use the Simple array adapter
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,android.R.id.text1,sessiontuts);

        //now to bind the data to list, just set the adapter we just created to the listview,
        lv1.setAdapter(adapter);

        //we need to have click listner on the particular item,
        //all the items in list will have a position starting from 0 to n,
        //so, write the intent code to launch particular activity depending on list item position
        lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) {
                //using switch case, to check the condition.
                switch (pos){
                    case 0:
                        startActivity(new Intent(getApplicationContext(), Act1.class));
                        break;
                    case 1:
                        startActivity(new Intent(getApplicationContext(), Act2.class));
                        break;
                }
            }
        });
    }
}
public类MainActivity扩展了AppCompatActivity{
ListView lv1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化列表视图
lv1=(ListView)findViewById(R.id.mainlist);
//添加列表数据
//当数组从0开始存储时,布局将处于第0位,意图为1,依此类推。。
String[]sessionuts=新字符串[]{“活动1”、“活动2”};
//使用简单阵列适配器
ArrayAdapter=新的ArrayAdapter(这个,android.R.layout.simple_list_item_1,android.R.id.text1,sessionuts);
//现在要将数据绑定到列表,只需将刚刚创建的适配器设置为listview,
lv1.设置适配器(适配器);
//我们需要在特定项目上单击listner,
//列表中的所有项目都将有一个从0到n的位置,
//因此,根据列表项的位置编写启动特定活动的意图代码
lv1.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共虚线单击(AdapterView AdapterView,视图视图,内部位置,长l){
//使用开关箱,检查
public class MainActivity extends AppCompatActivity {

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

        //Initialize the list view
        lv1 = (ListView) findViewById(R.id.mainlist);

        //Add the List data
        //as the array is stored starting with 0, the Layouts will be having 0th position, Intents being 1 and so on..
        String[] sessiontuts = new String[]{"Activity 1", "Activity2"};

        //use the Simple array adapter
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,android.R.id.text1,sessiontuts);

        //now to bind the data to list, just set the adapter we just created to the listview,
        lv1.setAdapter(adapter);

        //we need to have click listner on the particular item,
        //all the items in list will have a position starting from 0 to n,
        //so, write the intent code to launch particular activity depending on list item position
        lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) {
                //using switch case, to check the condition.
                switch (pos){
                    case 0:
                        startActivity(new Intent(getApplicationContext(), Act1.class));
                        break;
                    case 1:
                        startActivity(new Intent(getApplicationContext(), Act2.class));
                        break;
                }
            }
        });
    }
}