0

我有一个 ListActivity 然后管理一个简单的光标适配器来显示文本和图像以及每月每一天的分隔符。这个分隔符和输入适配器的信息是通过使用视图绑定器完成的。由于我需要这个应用程序从 API 8 工作,我发现的一些答案似乎不适用于该 API 版本。

到目前为止,我已经尝试使用 OnItemClickListener 来选择行,然后我已经存储了该行的位置,并将其与 getView 方法一起使用来尝试设置背景资源,但它似乎改变的只是分隔符的颜色不仅选择了当前行,还选择了其他行。

OnItemClickListener 已更改几次,因此当前代码是我最后一次失败的尝试:

datalist.setOnItemClickListener(new  OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                mC.moveToPosition(arg2); // The Cursor 
                rowchecked = arg2; // Global variable to store the position
                arg1.setBackgroundResource(android.R.color.holo_red_dark); // this is a recent attempt but I knew it would not work 

            Toast.makeText(getApplicationContext(), "Row "+Integer.toString(arg2) + " Clicked", Toast.LENGTH_LONG).show();

            }});

数据列表分配如下:

 ListView datalist = getListView();
 datalist.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);

获取视图如下:

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.viewdata, mC, fields, viewfields)
        {
            @Override
            public View getView(int position,View convertView, ViewGroup parent) {

                final View row = super.getView(position, convertView, parent);
                if (position == rowchecked) {
                    Toast.makeText(getApplicationContext(), "Detected row selected , row is :"+Integer.toString(rowchecked), Toast.LENGTH_LONG).show();
                 //row.setBackgroundResource(Color.BLUE);
                    row.setBackgroundColor(Color.BLUE);
                mC.moveToPosition(position);
                row.setSelected(true);
        }

                return row;
            }
        };

如果需要 viewbinder 代码,那么我会在请求时发布 - 那里有很多,所以我现在不发布所有内容。

*** 编辑 ****

真的很难让这篇文章的 OnitemLongClick 部分工作 OnitemClick 似乎使用/调用 simplecursoraapter 的 getView 方法,但 OnItemLongClick 侦听器没有。

阅读包括这篇文章在内的其他帖子 ->如何在列表视图上实现长点击侦听器

我已经尝试针对代码中的 listview 对象使用 setonlongclick(true),并尝试将其分配给 XML 布局中的 listview,并且我已经使用 AdapterView.OnItemLongClick 侦听器创建了 OnItemLongLick 侦听器。

4

1 回答 1

0

到目前为止,我已经让 onItemLongClickListener 使用适配器中的 notifydatasetchange 调用 getView。My problem is now that when the row is selected, it always highlights the first row in the list.

现在使用 setviewbinder 和 setviewvalue 方法对其进行排序.. 这是代码:

// is the current cursor position the same that has been Long Clicked             
if (cursor.getPosition()==longrowclick1) {  

    // sets up parent view of object  
     myviewp = (View) view.getParent();  
     // checks if parent view is valid (there are a lot here)  
    if (((View)view.getParent()).getId()==R.id.Table1  || ((View)view.getParent()).getId()==R.id.tableRow1 || ((View)view.getParent()).getId()==R.id.tableRow2  || ((View)view.getParent()).getId()==R.id.tableRow3  || ((View)view.getParent()).getId()==R.id.Table2 || ((View)view.getParent()).getId()==R.id.Table3 ) {  

        // If the parent views are valid set the background to dark slate blue  
        myviewp.setBackgroundResource(R.drawable.darkslateblue);  
        // if one of the child views are not the date separator then ..  
        if (view.getId()!=R.id.seper) {  
            // ... set them to the dark slate blue ...  
            view.setBackgroundResource(R.drawable.darkslateblue);  
        } else { // else if the child object is the date separator ..  
            // .. keep it as dark gray  
            view.setBackgroundColor(Color.DKGRAY);  
        }  



    }  




} else {// if the cursor position does not match the Long Click Position then ..  
    // .. get the parent of the current child object ...  
     myviewp = (View) view.getParent();  
     // .. set the background of the parent to black ..  
    myviewp.setBackgroundColor(Color.BLACK);  
    // .. check to make sure that the child object is not the date separator ...  
    if (view.getId()!=R.id.seper) {  
        // .. and then set the child object background to black ..   
        view.setBackgroundColor(Color.BLACK);   
     } else { // .. else if it the child object is the date separator then ..  
         // .. set it to the dark gray background .   
         view.setBackgroundColor(Color.DKGRAY);  
     }  


}  
于 2013-09-23T15:36:37.797 回答