Java 如何向listview添加变量/值并将其发送到新活动

Java 如何向listview添加变量/值并将其发送到新活动,java,android,listview,android-intent,multidimensional-array,Java,Android,Listview,Android Intent,Multidimensional Array,我不熟悉java和android。我有一个二维数组,其中包含一个数字和一个名称,如下所示: String[][] array = new String[2][2]; array[0][0] = "1"; array[0][1] = "Mickey""; array[1][0] = "2"; array[1][1] = "Mouse"; 阵列正在通过蓝牙接收数据进行更改-因此我无法对其进行“硬编码”。 我想制作一个只显示名称的列表视图,但如果单击它,它会将编号(

我不熟悉java和android。我有一个二维数组,其中包含一个数字和一个名称,如下所示:

String[][] array = new String[2][2];

    array[0][0] = "1";
    array[0][1] = "Mickey"";
    array[1][0] = "2";
    array[1][1] = "Mouse";
阵列正在通过蓝牙接收数据进行更改-因此我无法对其进行“硬编码”。 我想制作一个只显示名称的列表视图,但如果单击它,它会将编号(与此名称匹配)提供给新活动的

到目前为止,我已经做了一天多的事情:

mLstModes = (ListView) findViewById(R.id.LstModes);                      
ArrayList<String> arrayList = new ArrayList<String>();

//here I want to "add" also the number... 
arrayList.add(array[0][1]);
arrayList.add(array[1][1]);

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, arrayList);
mLstModes.setAdapter(arrayAdapter);                             
mLstModes.setOnItemClickListener(new OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int pos, long id)
    {
        Intent intent = new Intent();
        intent.setClassName(getPackageName(), getPackageName()+ ".NextActivity");
        intent.putExtra("selected", "I WANT THE NUMBER HERE");
        startActivity(intent);
    }
});
mLstModes=(ListView)findViewById(R.id.LstModes);
ArrayList ArrayList=新的ArrayList();
//在这里我想“添加”的数字也。。。
arrayList.add(数组[0][1]);
arrayList.add(数组[1][1]);
ArrayAdapter ArrayAdapter=新的ArrayAdapter(MainActivity.this,android.R.layout.simple\u list\u item\u 1,arrayList);
mLstModes.setAdapter(阵列适配器);
mLstModes.setOnItemClickListener(新的OnItemClickListener()
{
@凌驾
public void onItemClick(AdapterView父项、视图、整数位置、长id)
{
意图=新意图();
setClassName(getPackageName(),getPackageName()+“.NextActivity”);
intent.putExtra(“已选择”,“我想要这里的号码”);
星触觉(意向);
}
});
问题是,我不知道如何将数字也添加到arrayList中,这样我就可以很容易地让onItemClick方法传递名称的数字

对不起,如果问题是noobish,但我希望有人能帮我。
谢谢

我同意@ono,我更喜欢使用
customAdapter
,但如果你不想做这一艰难、漫长但更好的步骤,总有另一种方法

由于
arrayList
是字符串,您可以通过执行以下操作来添加数字:

arrayList.add(array[0][1] + " " + array[0][0]); //output will be "Mickey 1"
arrayList.add(array[1][0] + " " + array[1][1]);
当您将其添加到
列表视图中时,它将是同一行中的名称和编号

现在,对于
onItemClick
,您可以对文本执行
子字符串
,每当文本到达空格时,开始剪切所需的数字并通过发送。比如:

mLstModes.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int pos, long id)
{
    TextView tv = (TextView) v;
    String number = tv.substring(" "); //will substring starting from the space till the end of the string.
    Intent intent = new Intent();
    intent.setClassName(getPackageName(), getPackageName()+ ".NextActivity");
    intent.putExtra("selected", number.trim()); // the trim is remove any whitespaces between the number
    startActivity(intent);
}
});
然后使用以下代码:p.S:我没有实现代码,希望它能工作,但我希望你能理解

mLstModes = (ListView) findViewById(R.id.LstModes);                      
ArrayList<String> arrayList = new ArrayList<String>();

arrayList.add(array[0][1]);
arrayList.add(array[1][1]);


map.add(array[0][1], array[0][0]);
map.add(array[1][1], array[1][0]);
// and so on.

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, arrayList);
mLstModes.setAdapter(arrayAdapter);                             
mLstModes.setOnItemClickListener(new OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int pos, long id)
    {
        TextView tv = new view.TextView(getApplicationContext()); //to get the value of the name from the list to use it as a key
        Intent intent = new Intent();
        intent.setClassName(getPackageName(), getPackageName()+ ".NextActivity");
        intent.putExtra("selected", map.get(tv.getText().toString())); // use textView to get the ID.
        startActivity(intent);
    }
});
mLstModes=(ListView)findViewById(R.id.LstModes);
ArrayList ArrayList=新的ArrayList();
arrayList.add(数组[0][1]);
arrayList.add(数组[1][1]);
add(数组[0][1],数组[0][0]);
add(数组[1][1],数组[1][0]);
//等等。
ArrayAdapter ArrayAdapter=新的ArrayAdapter(MainActivity.this,android.R.layout.simple\u list\u item\u 1,arrayList);
mLstModes.setAdapter(阵列适配器);
mLstModes.setOnItemClickListener(新的OnItemClickListener()
{
@凌驾
public void onItemClick(AdapterView父项、视图、整数位置、长id)
{
TextView tv=new view.TextView(getApplicationContext());//从列表中获取名称的值,并将其用作键
意图=新意图();
setClassName(getPackageName(),getPackageName()+“.NextActivity”);
intent.putExtra(“selected”,map.get(tv.getText().toString());//使用textView获取ID。
星触觉(意向);
}
});

检查ListView的自定义适配器。此外,考虑使用HASMAP而不是ARARYLIST。查看此问题您需要通过扩展BaseAdapter类来创建适配器,然后您可以通过onItemClick()中的position参数获取所选项目的数据我搜索了自定义适配器,但没有找到任何与我的问题匹配的数据。我刚刚找到了将确定的数组显示到列表并在下一个活动中创建文本编辑的解决方案。问题是,我的数组在运行时正在更改,并且数字不会显示为1,2,3。。。。。它们不是按时间顺序排列的,也不是连续的。如果有人能为我的问题提供更具体的帮助,我会非常高兴。我在
arrayList.add(array[0][1]+“”+array[0][0])中忘记了+这个词我认为最好的方法是将名称映射到数字。只要有一个空间,这就可以工作。这取决于他想做什么。是的,我知道我可以作为一个演练来做,但数字对用户来说并不重要-而且它们不是顺序的(比如3,5,8,2,4)-所以我不想展示你说你可能有其他方法。。。你能给我看看吗?重要的是名单上没有显示这个号码。问题是我不理解自定义适配器的方式,因为我是初学者。谢谢!请检查编辑的部分,不幸的是,我无法实现代码,因为我的时间很短。但这是一个伟大的概念,将与您合作。所以,给我一个反馈,如果它工作!祝你好运
mLstModes = (ListView) findViewById(R.id.LstModes);                      
ArrayList<String> arrayList = new ArrayList<String>();

arrayList.add(array[0][1]);
arrayList.add(array[1][1]);


map.add(array[0][1], array[0][0]);
map.add(array[1][1], array[1][0]);
// and so on.

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, arrayList);
mLstModes.setAdapter(arrayAdapter);                             
mLstModes.setOnItemClickListener(new OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int pos, long id)
    {
        TextView tv = new view.TextView(getApplicationContext()); //to get the value of the name from the list to use it as a key
        Intent intent = new Intent();
        intent.setClassName(getPackageName(), getPackageName()+ ".NextActivity");
        intent.putExtra("selected", map.get(tv.getText().toString())); // use textView to get the ID.
        startActivity(intent);
    }
});