2011-12-08 3 views
1

この問題の洞察をしてください。 私はこのListViewを初めて使っています。私はデータベースからデータを入れて、リスト項目のIDをDBレコードのIDに設定しました。TableRowのAndroidカスタムListView。 setOnclickListener?

レイアウト用にandroid.R.layout.simple_list_item_1を使用する場合はすべてOK、テキストが表示されるTextView用にandroid.R.id.text1を使用してください。 私はsetOnItemClickListenerを設定して、Toastの正しいデータ(項目の位置と_idが設定したもの)を取得しました。

私は、リストアイテムのカスタムレイアウトとしてTableRowまたはTableLayoutを使用したいと思っていました。 それは動作しますが、TableRow(つまりTableRow自体)のViewsへの参照を取得する方法がわかりません。

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

なぜTableLayoutを使用していますか?レイアウトは、水平のLinearLayoutを使用するとより効果的に実装できます。 –

+0

はい私はそう思った。物語は、私はテーブルの中でいくつかのテーブルの行を膨らませていたということです。私がプロジェクトを終えたとき、私はAndroidの莫大な努力と約15行以上を膨らませる時間がかかることを知ったので、できるだけ多くの完成した仕事を続けたいと思っていました。それはリストビューアイテムのクリックで変化するイメージを持つことが可能ですか? – PacQ

答えて

0

ListViewでTableLayoutを通常の方法で参照することはできないようですので、LinearLayoutを使用してonItemClickを機能させる必要がありました。 配列に最後のSting(余分な文字列)をつけてItemに割り当てた親、ビュー、位置、および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のツイークです。

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

、彼らがより良い方法を知っていれば、私は、誰かがこの便利を見つけるか、できるだけ早くそれはそれを行う方法はありません私に言うことができると思います。 ありがとう