2012-03-16 15 views
2

私が見たチュートリアルから単純なアプリケーションを設計しています。リストビューの各行に名前と価格の2つのテキストビューを表示するよう試みています。これはうまくいって、私は行を選択することができ、それは意図を活性化するでしょう。しかし、私はxmlコードを変更して、リストビューをlinearLayoutに配置して、画面上部にヘッダーを置くようにしました。今は、いずれかの行をクリックすると、強調表示されますが、それ以外は何も起こりません。私はすでにXMLでclickable = falseに設定されたtextviewsを作成しようとしましたが、まだ運がありません。私はonCreateメソッドで単純なものが欠けていることを期待しています。 `パブリッククラスViewMenuListingはListActivity私はこのコードで変更{LinearLayout内のListViewはもはやOnclickListenerに反応しません

public static final String ROW_ID = "row_id"; // Intent extra key 
private ListView contactListView; // the ListActivity's ListView 
private CursorAdapter contactAdapter; // adapter for ListView 
private String tableName; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    contactListView = getListView(); // get the built-in ListView 
    contactListView.setOnItemClickListener(viewContactListener); 

    setContentView(R.layout.viewmenu); 

    //Get table name of menu clicked. 
    Bundle extras = getIntent().getExtras(); 
    tableName = extras.getString("table"); 

    // map each contact's name to a TextView in the ListView layout 
    String[] from = new String[] { "name", "price" }; 
    int[] to = new int[] { R.id.itemTextView, R.id.priceTextView }; 
    //int[] to = new int[] { R.id.itemTextView}; 

    contactAdapter = new SimpleCursorAdapter(
      ViewMenuListing.this, R.layout.menu_list_item, null, from, to); 
    setListAdapter(contactAdapter); // set contactView's adapter 
}` 

唯一のことは、私が前にdidntの、リストだけでコンテンツビューになるとき、私は今、setContentView(R.layout.viewmenu)を使用したことだった拡張します。ここで

は私のviewMenuファイルです:

`

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" /> 
    <ListView 
     android:id="@+id/android:list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
</LinearLayout>` 

と私のmenu_list_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/itemTextView" 
     android:padding="8dp" 
     android:clickable = "false" 
     android:textSize="20sp" android:textColor="@android:color/white" 
     android:minHeight="?android:attr/listPreferredItemHeight" 
     android:gravity="center_vertical"> 
    </TextView> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/priceTextView" 
     android:clickable = "false" 
     android:textColor="@android:color/white"/> 
</LinearLayout> 

あなたの助けをありがとう!

+0

親LinearLayoutを削除すると(基本的に何も変更せずに)、動作しますか?また、別のListViewを定義するときにListActivityを使用する理由はありますか? – Soham

+0

はい、setContentViewをコメントアウトすると機能します。正直なところ私はチュートリアルに従っていました。私はそれが悪いことだと思う! –

答えて

2

明示的にonItemClickListenerをListViewに設定しているようです。 ListActivityを拡張しているので、これは本当に必要ではありません。ListActivityには、onListItemClick()というオーバーライド可能なメソッドがあります。 onItemClickListenerを明示的に設定するのではなく、onListItemClick()メソッドをオーバーライドします。 http://developer.android.com/reference/android/app/ListActivity.html#onListItemClick(android.widget.ListView, android.view.View, int, long)

+0

私は私のonItemClickListenerにあるすべてを上書きonListItemClick()に配置しますか?申し訳ありませんがここでは初心者です。 –

+0

はい、正しいです。 ListActivityとNOT Activityを必ず拡張してください。 –

+0

それは仕事をした!どうもありがとう! –

0

あなたのクラスは、アプローチの上に動作しませんので、あなたは、活動を拡大しているListActivity .INあなたのケースを拡張されている場合、上記の構文のみを使用することができ、以下のもの

contactListView = getListView(); and setListAdapter(contactAdapter); 

を修正してください。

あなたのmenu_list_item.xmlは私にはまったくうまく見えます。 viewmenu.xmlファイル内の は、listviewのidを指定しながら、次のように修正します。

<ListView 
    android:id="@+id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 

この修正されたコードをご覧ください。

public class SampleActivity extends ListActivity 
{ 
    public static final String ROW_ID = "row_id"; // Intent extra key 
    private ListView contactListView; // the ListActivity's ListView 
    private CursorAdapter contactAdapter; // adapter for ListView 
    private String tableName; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     contactListView = (ListView) findViewById(R.id.list); // get the 
                   // built-in 
                   // ListView 
     contactListView.setOnItemClickListener(this); 

     setContentView(R.layout.viewmenu); 

     Bundle extras = getIntent().getExtras(); 
     tableName = extras.getString("table"); 

     // map each contact's name to a TextView in the ListView layout 
     String[] from = new String[] 
     { "name", "price" }; 
     int[] to = new int[] 
     { R.id.itemTextView, R.id.priceTextView }; 

     contactAdapter = new SimpleCursorAdapter(SampleActivity.this, 
       R.layout.menu_list_item, null, from, to); 
     contactListView.setAdapter(contactAdapter); 
    } 

    @Override 
    public void onListItemClick(AdapterView<?> adapterView, View view, 
      int position, long arg3) 
    { 

    } 
} 

ここでonListItemClickメソッドでは、必要なロジックを書くことができます。

このヘルプが必要です。

+0

時間を割いていただき、ありがとうございます。ソリューションを表示するのに役立つコードを人々が実際に作成すると非常に役に立ちます。しかし、アレックス・フーの解決策は私がこれを見る前に働いた。再度、感謝します! –

+0

あなたは歓迎です:) –

関連する問題