2012-04-22 13 views
0

Androidアプリケーション用のViewスタックシステムを実装しました。新しいビューを押すと、ターゲットレイアウトの現在のビューが削除され、スタック内に配置し、新しいビューをレイアウトに追加します。Android ListViewはremoveAllViews()で削除され、addViewで復元された後にitemClickイベントを受け取らない

ListViewを含むビューを保存してから復元するまで、問題なく機能します。これを行うと、ListViewはスクロールしますが、itemClickイベントは受け取りません。

Stack<View> viewStack; 

public View pushView(View v) { 
    // 1. Get reference to main content panel 
    LinearLayout content = (LinearLayout) findViewById(R.id.contentPanel); 
    View last = content.getChildAt(0); 
    // Pushing old to stack 
    viewStack.push(last); 

    // 2. Clear it 
    content.removeAllViews(); 

    // 3. Add new View 
    content.addView(v); 

    return last; 
} 

public View popView() { 
    if (!viewStack.isEmpty()) { 
     // 1. Get reference to main content panel 
     LinearLayout content = (LinearLayout) findViewById(R.id.contentPanel); 
     View last = content.getChildAt(0); 

     // 2. Clear it 
     content.removeAllViews(); 

     // 3. Add last View 
     content.addView(viewStack.pop()); 
     // Pushing old to stack 
     return last; 
    } else { 
     return null; 
    } 
} 

は不思議なことに、リストビュー(チ​​ェックボックスとボタン)を含むビュー内の他の項目はclickEventsを受信DO次のよう

スタックシステムのためのコードです。 私は疑う:それはこれらのイベントを受信しないよう 1. ListViewコントロールがフォーカスを失った、または 2.リストビューは、事前にonItemClickListenerの

感謝を取り外しました!

+0

ビューに追加するときに各項目にリスナーを追加する必要があると思います。 – Guillaume

+0

もちろん、ListViewを含むビューが初めてビルドされて追加されると、すべてが機能しています。この問題は、示されている方法で保存して復元すると発生します。私はそれを指摘することを忘れて申し訳ありません:) – thegraffo

+0

さて、あなたはリスナーを初めて追加するが、後ではない? – Guillaume

答えて

0

xmlファイルのレイアウトで「クリック可能」を「true」に設定した場合は、すべての場所からそれを削除します。試してみることができます...

あなたがどこにでも宣言している場合のみ。 "view_name.setClickable(true)"を宣言している場合は、この行を削除してください。 ontouchlistenerを使用している場合、もう1つは常にfalseを返します。実際に私はリストビューの行でlistviewとimageviewを使用していた同様の問題に直面しています。私のイメージビューはクリックイベントを受け取っていましたが、レイアウトビューでclickableとしてimageviewを設定していたので、listviewはonitemclickイベントを受け取っていませんでした。

+0

コンテナレイアウトや追加されたレイアウトでは、クリック可能なものは何もありません。コンポーネントに「false」としてクリック可能と明示的に宣言する必要がありますか? – thegraffo

+0

あなたがどこにでも宣言している場合は、いいえ。 –

関連する問題