Android自定义ListView与TableRow内。 setOnclickListener?

时间:2011-12-08 18:28:23

标签: listview tablerow listitem onitemclicklistener

我想要了解这个问题。 我是这个ListView的新手。我已设法从数据库中输入数据,并将列表项的id设置为DB记录的id。

使用android.R.layout.simple_list_item_1作为布局时一切正常,而将Text.R.id.text1用于TextView所在的TextView。 我甚至设置了setOnItemClickListener并获得了Toast whit正确数据(项目位置和我设置的_id)。

比我想使用TableRow或TableLayout作为列表项的自定义布局。 这有效,但我不知道如何引用TableRow中的视图(即TableRow本身)?

setOnItemClickListener停止工作,我不能在行上使用setOnclickListener。

如果我想获得ListView项目的POSITION和ID,或者我应该使用更聪明的东西,是否有可能以某种方式使用这种技术?

这是我的代码:

public class ListView1 extends ListActivity {
    private DBAdapter db;
    private Cursor getMatchigItems;
    private OnItemClickListener listener;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

                db = new DBAdapter(this);
                db.open();
                getMatchigItems = db.getMatchingItems(4, 1);
                startManagingCursor(getMatchigItems);

//              SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
//                      android.R.layout.simple_list_item_1,
//                      getMatchigItems,
//                      new String[]{db.KEYITEMS_TXTITEMNAME, db.KEYITEMS_ROWID},
//                      new int[]{android.R.id.text1});             
//              setListAdapter(adapter);

                SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                        R.layout.table_row,
                        getMatchigItems,
                        new String[]{db.KEYITEMS_TXTITEMNAME, db.KEYITEMS_ROWID},
                        new int[]{R.id.textViewItems1});                
                setListAdapter(adapter);

        ListView lv = getListView();
        lv.setTextFilterEnabled(true);
        lv.setOnItemClickListener(listener);

        lv.setOnItemClickListener(new OnItemClickListener() {

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

                Toast.makeText(getApplicationContext(), "id: " + String.valueOf(id) + "\npos: " + String.valueOf(position), Toast.LENGTH_SHORT).show();

            };
        });         
    }
}

这是我想要使用的TableRow布局:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tableRowLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

<TableRow
    android:id="@+id/tableRowLayoutRow1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/rowcat"
    android:layout_marginTop="2dp"
    android:minHeight="40dp" android:gravity="center_vertical">

    <View android:id="@+id/imagePlaceholderBlank1Items"
            android:layout_width="40dp"
            android:minHeight="40dp" android:layout_height="fill_parent" android:background="@drawable/editicon"/>
     <TextView android:id="@+id/textViewItems1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Tule bo ime artikla" style="@style/whiteText" android:layout_marginLeft="10dp" android:ellipsize="marquee" android:lines="1" android:focusable="true" android:width="220dp" android:scrollHorizontally="true" android:marqueeRepeatLimit="marquee_forever" android:focusableInTouchMode="true"/>
        <TextView android:id="@+id/imagePlaceholderButton1Items"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:minHeight="40dp"
            android:gravity="center" android:textColor="#FFF" android:background="@drawable/buttonoff" android:tag="off"/>
</TableRow>
</TableLayout>

提前感谢任何建议!

1 个答案:

答案 0 :(得分:0)

您似乎无法以正常方式在ListView中引用TableLayout,因此我必须使用LinearLayout来使onItemClick正常工作。 它甚至为您提供了一些很好的参数:父,视图,位置和我已经分配给Item的ID以及数组中最后一个Sting(一个额外的String)。

注意3个TextViews的“to”参数,我在“from”参数中使用了4个字符串。最后一个是额外的,它必须是数据库表中的“ _id ”键。它被分配给项目ID。效果很好。

new String[]{db.KEYITEMS_TXTITEMNAME, db.KEYITEMS_INTIDCAT, db.KEYITEMS_ROWID, db.KEYITEMS_ROWID},
new int[]{R.id.text1,R.id.text2,R.id.text3});

这是整个活动:

public class ListView2 extends ListActivity {
    private DBAdapter db;
    private Cursor getMatchingItems;
    private ListView lv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.testview);

        db = new DBAdapter(this);
        db.open();
        getMatchingItems = db.getMatchingItems(3, 1);
        startManagingCursor(getMatchingItems);


        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                R.layout.testlistrow,
                getMatchingItems,
                new String[]{db.KEYITEMS_TXTITEMNAME, db.KEYITEMS_INTIDCAT, db.KEYITEMS_ROWID, db.KEYITEMS_ROWID},
                new int[]{R.id.text1,R.id.text2,R.id.text3});               
        setListAdapter(adapter);

        lv = getListView();
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long myId) {
                final ListView lvTest = getListView();
                final LinearLayout llTest = (LinearLayout) lvTest.getChildAt(position);
                TextView tv1 = (TextView) llTest.findViewById(R.id.text1);
                tv1.setText("CHANGE");
                tv1.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {

                        String s = llTest.getParent().toString();
                        Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
                    }
                });
                String s = String.valueOf(lvTest.getChildAt(position));
                Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
            }
        });
    }

}

这是我从this lovely lady借来的XML。 她为SimpleAdapter解释得很好。这只是我对SimpleCursorAdapter的推文。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ListView android:id="@id/android:list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#000fff"
    android:layout_weight="2"
    android:drawSelectorOnTop="false">
    </ListView>
<TextView  android:id="@id/android:empty"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFff00"
    android:text="No data"
    />
</LinearLayout>

我希望有人能找到这个有用的,或者ASAP告诉我,如果他们知道更好的方法,那就不是这样做的方法。 感谢