Android自定义列表视图,setOnItemSelectedListener不起作用

Tej*_*udi 9 android listview

我刚刚开始Android开发,我正在努力获得一个带有复选框工作的自定义列表视图.我创建了一个扩展Activity的基类,创建了一个适配器,并覆盖了getView()方法,将复选框添加到listview中.我假设我需要这样做,因为我需要didSelectRowIndexAtPath与Obj C 相当的东西来更新我的模型.请告诉我是否还有其他方法可以做到这一点!

现在在我的基类中,我有以下代码 -

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout);
    setContentView(R.layout.facilityscreen);

    /* Static Data source */
    facilityModel = new FacilityDataModel[2];

    facilityModel[0] = new FacilityDataModel();
    facilityModel[1] = new FacilityDataModel();


    facilityModel[0].setFacilityName("Test 1");
    facilityModel[0].setFacilityID("Facid0001");
    facilityModel[0].setChecked(false);


    facilityModel[1].setFacilityName("Test 2");
    facilityModel[1].setFacilityID("Facid0002");
    facilityModel[1].setChecked(true);


    facilityListView = (ListView) findViewById(R.id.facilityListView);

    FacilityScreenAdapter adapter = new FacilityScreenAdapter(this, facilityModel);

    facilityListView.setAdapter(adapter);    

    myPatBtn = (Button) findViewById(R.id.myPatBtn);
    myPatBtn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            int i=0;
            i++;
        }});

    facilityListView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            int i=0;
            i++;

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });

}    
Run Code Online (Sandbox Code Playgroud)

我现在的问题是根本没有调用setOnItemSelectedListener.现在已经挣扎了几个小时,我无法弄清楚为什么它根本不会被调用.

任何帮助深表感谢!

谢谢,
Teja.

小智 18

我知道这是一个过时的答案,但我打算写一下,以防其他一些有同样"问题"的人碰到这个页面:

上述问题的解决方案不是问题而只是一个误解是ListView.onItemSelected()事件被触发,在:

1)导航模拟器 - 交叉手柄或2)就我的HTC-Hero而言,在白色小滚球上进行滚动动作.

您不必将活动显式扩展到ListActivity.

这是我的小代码,它从listView项目中的TextView控件中检索电话号码.当用户触摸列表项或滚动列表时

以下事件中的小滚球,启动和MakeACall()方法被调用:

myList.setOnItemClickListener(new OnItemClickListener() 
        {
            public void onItemClick(AdapterView<?> parent, View view, int position, long i) 
            {
                TextView myPhone = (TextView)view.findViewById(R.id.txtphone);
                MakeACall(myPhone.getText().toString());        
            }
        });

        myList.setOnItemSelectedListener(new OnItemSelectedListener() 
        {
            public void onItemSelected(AdapterView<?> parent, View view, int position, long i) 
            {
                TextView myPhone = (TextView)view.findViewById(R.id.txtphone);
                MakeACall(myPhone.getText().toString());
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });
Run Code Online (Sandbox Code Playgroud)

我希望这对你有帮助...... :)


Jur*_*uri 4

已经存在带有复选框的 ListView 的可能性。

public class List11 extends ListActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice, GENRES));

        final ListView listView = getListView();

        listView.setItemsCanFocus(false);
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    }


    private static final String[] GENRES = new String[] {
        "Action", "Adventure", "Animation", "Children", "Comedy", "Documentary", "Drama",
        "Foreign", "History", "Independent", "Romance", "Sci-Fi", "Television", "Thriller"
    };
}
Run Code Online (Sandbox Code Playgroud)

我从APIDemos中获取了这个,因为它是最简单的。然后,您可以使用以下方法获取所选项目:

long[] selectedIds = getListView().getCheckItemIds();
Run Code Online (Sandbox Code Playgroud)

您可能还感兴趣的是列表内部使用的CheckedTextView 。

onListItemClick对于问题的部分尝试从而不是
延伸。然后覆盖. 那应该有效。ListActivityActivityonListItemClick