Android ListView的getSelectedItemPosition()返回-1

Android ListView的getSelectedItemPosition()返回-1,android,listview,selecteditem,Android,Listview,Selecteditem,在这段代码中,当System.out.println在setSelection指令之后执行时,返回-1,我不知道为什么 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.composition); lv = (ListView) findViewById(android.R

在这段代码中,当System.out.println在setSelection指令之后执行时,返回-1,我不知道为什么

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.composition);

        lv = (ListView) findViewById(android.R.id.list);
        cabecera = (TextView) findViewById(R.id.cabecera);
        information = (TextView) findViewById(R.id.paciente);

        proceso = new ArrayList<>();
        proceso.add("- Item1");
        proceso.add("- Item2");

        adapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.customizedlistitem,proceso);
        lv.setAdapter(adapter);

        lv.post(new Runnable() {
            @Override
            public void run() {
                lv.setSelected(true);
                lv.setSelection(0);
                adapter.notifyDataSetChanged();
                System.out.println("Selected Item onCreate: "+lv.getSelectedItemPosition());
                System.out.println("Get Count en onCreate: "+lv.getCount());
            }
        });

        nextBundle = new Bundle();
        nextBundle.putString("name",proceso.get(position));

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                in = new Intent(getApplicationContext(),Check.class);
                in.putExtras(nextBundle);
                startActivity(in);
            }
        });
    }
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.composition);
lv=(ListView)findViewById(android.R.id.list);
cabecera=(TextView)findViewById(R.id.cabecera);
信息=(TextView)findViewById(R.id.paciente);
proceso=newarraylist();
程序添加(“-项目1”);
程序添加(“-项目2”);
adapter=new ArrayAdapter(getApplicationContext(),R.layout.customizedlistitem,proceso);
低压设置适配器(适配器);
lv.post(新可运行(){
@凌驾
公开募捐{
lv.setSelected(真);
三级选举(0);
adapter.notifyDataSetChanged();
System.out.println(“创建时选择的项:+lv.getSelectedItemPosition());
System.out.println(“getcounten onCreate:+lv.getCount());
}
});
nextBundle=新Bundle();
nextBundle.putString(“name”,proceso.get(position));
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
in=newintent(getApplicationContext(),Check.class);
in.putExtras(下一个bundle);
星触觉(in);
}
});
}
应用于ListView的getCount()函数返回正确的值:2

我一直在寻找解决方案,但我所阅读和测试的内容并不能解决问题

更新:

此代码:

listPacientes = new ArrayList<>();
listPacientes.add("Elemento 1");
listPacientes.add("Elemento 2");
listPacientes.add("Elemento 3");

adapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.customizedlistitem,list);
lv.setAdapter(adapter);

lv.setSelection(1);
System.out.println(lv.getSelectedItemPosition());
listPacientes=newarraylist();
添加(“元素1”);
添加(“Elemento 2”);
添加(“Elemento 3”);
adapter=new ArrayAdapter(getApplicationContext(),R.layout.customizedlistitem,list);
低压设置适配器(适配器);
lv.选举(1);
System.out.println(lv.getSelectedItemPosition());

在主要活动上工作。“System.out”返回1,但在下一个活动中相同的代码返回-1,为什么?我无法理解。

您首先选择单元格,然后通过调用
adapter.notifyDataSetChanged()刷新ListView-这样,您的选择将被删除

使用
lv.getSelectedItemPosition()
方法内部的
onItemClick()
方法。您将在此处获得正确的值

我认为lv.getSelectedEmposition()将在listview.onitemselectedlistener中工作…我已删除该指令,程序仍然存在相同的问题谢谢,我将测试它。但是,我不知道为什么在其他具有几乎相同代码的活动中,函数会返回正确的值..:(