2017-12-07 20 views
-1

異なるクラスのリストビューとカスタムアダプタ。
カスタムアダプターは2つのtextViewsを持っていますOnItemClickListenerからビューを取得するためのリスナーを作成します。

私はTextviewsのリスナーを作成しました。
TextViewリスナーは、しばらく時間が経っても動作しません。

あなたはユーザーからのタッチを取るに初めてそれが親として動作しませんので、親をクリックしたとき、子ビューでイベントをクリックし登録しようとしているが、子要素の標高やイベントリスナーに基づいています
listView.setOnItemClickListener(new OnItemClickListener() { 

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

      TextView tv1 = (TextView) view.findViewById(R.id.tv1); 

      tv1.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        Toast.makeText(act, "tv1 clicked", 300).show(); 
       } 
      }); 

      TextView tv2 = (TextView) view.findViewById(R.id.tv2); 

      tv2.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 
        Toast.makeText(act, "tv2 clicked", 300).show(); 
       } 
      }); 

      // listViewListeners(parent, view, pos, id); 
     } 
    }); 
+0

Questionは 'onItemClick'にリスナーを追加する理由ですか?正しく動作しません。カスタムアダプタクラスでクリックリスナーを追加しないのはなぜですか? –

+0

リストビューとカスタムアダプターはそれぞれ異なるクラスにあり、アダプターは複数のアクティビティーを使用する必要があります。 –

+0

アダプタのgetView()のリスナーを設定します。カスタムリストアダプターのチュートリアルに従います。 "私のアダプターは複数のアクティビティーを使用する必要があります"リストアイテムのクリックで何をすると思われますか? – ADM

答えて

1

それは子供からのクリックを取る。

それらの使用インターフェース

interface ClickListener{ 
    void tvOneClicked(int position); 
    void tvTwoClicked(int position); 
} 

を避け、

adapter = new CustomAdapter(this,some_layout,somedata, new ClickListener(){ 
    @Override 
    public void tvOneClicked(int position){ 
     //Toast.makeText(act, "tv1 clicked", 300).show(); 
    } 

    @Override 
    public void tvOneClicked(int position){ 
     //Toast.makeText(act, "tv2 clicked", 300).show(); 
    }}); 

のようにそして、あなたのAdapterにインターフェイス上での活動のパスからアダプタを呼び出している間、あなたのtextviewの際にいずれかをactivityを呼び出すためにこれを使用するには をクリック

private ClickListener clickListener; 
public CustomAdapter(Activity act,int layout,List<> data, ClickListener listener){ 
    this.clickListener = listener; 
} 

public void getView(...){ 

    ... 
    tv1.setOnClickListener(new OnClickListener() { 
       @override 
       public void onClick(View v) { 
        clickListener.onOneClicked(position); 
       } 
      }); 
      tv2.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 
        clickListener.onTwoClicked(position); 
       } 
      }); 
    ... 
    } 
+0

その作業...ありがとう –

関連する問題