2011-12-08 3 views
1

이 문제에 대한 통찰력을 부탁드립니다. 저는이 ListView를 처음 사용합니다. 나는 데이터베이스에서 데이터를 넣고 목록 항목의 ID를 DB 레코드의 id로 설정했습니다.TableRow가 포함 된 Android 사용자 정의 ListView. setOnclickListener?

레이아웃에는 android.R.layout.simple_list_item_1을 사용하고, 내 텍스트가있는 TextView에는 android.R.id.text1을 사용하면 좋습니다. 심지어 setOnItemClickListener를 설정하고 토스트 오순절 올바른 데이터 (항목 위치 및 _id 설정)가 있습니다.

목록 항목의 사용자 지정 레이아웃으로 TableRow 또는 TableLayout을 사용하고 싶습니다. 그게 작동하지만 TableRow (즉, TableRow 자체)의 뷰에 대한 참조를 얻는 방법을 모르겠습니다.

setOnItemClickListener가 작동을 멈추고 행에서 setOnclickListener를 사용할 수 없습니다.

POSITION 및 ListView 항목의 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

왜 TableLayout을 사용하고 있습니까? 레이아웃은, 수평의 LinearLayout를 사용해,보다 효율적으로 구현할 수 있습니다. –

+0

네, 그렇게 생각했습니다. 그 이야기는 제가 테이블에있는 테이블 행을 팽창시키고 있다는 것입니다. 프로젝트를 마쳤을 때 나는 안드로이드의 노력과 시간이 15 줄 이상 늘어날 것을 알았다. 그래서 지금 나는 끝낼 수있는만큼 많은 일을하고 싶었다. 그러나 나는 그렇게하지 않을 것 같다. :) Is Is 목록보기 항목에서 클릭하면 이미지가 변경 될 수 있습니까? – PacQ

답변

0

ListView에서 일반적인 방식으로 TableLayout을 참조 할 수 없기 때문에 LinearLayout을 사용하여 onItemClick을 사용해야했습니다. 배열의 마지막 스팅 (추가 문자열)을 사용하여 항목에 할당 한 부모, 뷰, 위치 및 ID와 함께 사용할 수있는 좋은 인수를 제공합니다.

"to"매개 변수에 대한 3 개의 TextView와 "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에서 borowed 한 XML입니다. SimpleAdapter에 대해 설명합니다. 이것은 SimpleCursorAdapter를위한 나의 tweek이다.

<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> 

누군가가이 유용한 정보를 찾을 수 있기를 바랍니다. 또는 더 나은 방법을 알고 있다면 가능한 한 빨리 정보를 말해주세요. 감사합니다.

관련 문제