2

私のコードで onItemClickListener を動作させるのに問題があります。それをテストするために、onClick 内に Toast を配置して、ビュー (カバーフローの画像) の 1 つがクリックされた場合に画面にテキストを表示しますが、結果はありません。私はおそらく何か間違ったことをしています。私は何をすべきか?

以下に示すコードには 2 つの部分があります。最初の部分は、coverflow アクティビティを実装するために使用している coverFlowExample.java クラス ファイルからのものです。下にあるコードの 2 番目の部分は、抽象クラス CoverAdapterView と呼ばれる他のクラス ファイルからのもので、OnItemClickListener の抽象メソッドがあります。

以下のコードは、coverflowactivity アクティビティの oncreate メソッドにあります。

onItemClick メソッドで取得されるパラメーターの一部である int 位置変数をコンパイラーが直接使用できないため、「int = xu 位置」を作成する必要がありました。

   // inner class inside of onCreate method for implememting OnIteimClickListener

        class ClickOnImage implements OnItemClickListener {  

        @Override
        public void onItemClick(CoverAdapterView<?> parent, View view,
                int position, long id) {

            int xu = position;

            Toast.makeText(CoverFlowExample.this, "clicked on one of  the images " + xu, Toast.LENGTH_SHORT).show();

        }

    }

次は、他のクラス ファイルにある OnItemClickListener に関係するコードです。

  public abstract class CoverAdapterView<T extends Adapter> extends ViewGroup {

  // inside this abstract class the below code is refers to the OnItemClickListener

  /**
  * The listener that receives notifications when an item is clicked.
  */
  OnItemClickListener mOnItemClickListener;

   /**
  * Interface definition for a callback to be invoked when an item in this
  * AdapterView has been clicked.
  */
   public interface OnItemClickListener {

    /**
     * Callback method to be invoked when an item in this AdapterView has
     * been clicked.
     * <p>
     * Implementers can call getItemAtPosition(position) if they need
     * to access the data associated with the selected item.
     *
     * @param parent The AdapterView where the click happened.
     * @param view The view within the AdapterView that was clicked (this
     *            will be a view provided by the adapter)
     * @param position The position of the view in the adapter.
     * @param id The row id of the item that was clicked.
     */
    void onItemClick(CoverAdapterView<?> parent, View view, int position, long id);


    }

   /**
    * Register a callback to be invoked when an item in this AdapterView has
    * been clicked.
    *
    * @param listener The callback that will be invoked.
    */
    public void setOnItemClickListener(OnItemClickListener listener) {
    mOnItemClickListener = listener;
   }

   /**
    * @return The callback to be invoked with an item in this AdapterView has
    *         been clicked, or null id no callback has been set.
    */
    public final OnItemClickListener getOnItemClickListener() {
    return mOnItemClickListener;
   }

   /**
   * Call the OnItemClickListener, if it is defined.
   *
   * @param view The view within the AdapterView that was clicked.
   * @param position The position of the view in the adapter.
   * @param id The row id of the item that was clicked.
   * @return True if there was an assigned OnItemClickListener that was
   *         called, false otherwise is returned.
   */
    public boolean performItemClick(View view, int position, long id) {
        if (mOnItemClickListener != null) {
        playSoundEffect(SoundEffectConstants.CLICK);
        mOnItemClickListener.onItemClick(this, view, position, id);
        return true;
    }

    return false;
   }
4

2 に答える 2

2

クリックを予期しているビュー オブジェクトに OnItemClickListener を設定していますか?

ListView mListView;

mListView = (ListView) findViewById(R.id.xml_layout_view_name);

mListView.setOnItemClickListener(new ClickOnImage())

私の最初の推測は、 ClickOnImage クラスがクリックされているオブジェクトに接続されていないことです。

于 2012-10-04T03:18:04.980 に答える
1

setOnItemClickListenerメソッドを使用してみてください。

    CoverFlow  coverFlow;
    coverFlow = new CoverFlow (this);  

    coverFlow.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(CoverAdapterView<?> parent, View view,
                int position, long id) {

             System.out.println("----------------->"+ position );


        }

    });   

幸運を。

于 2012-10-04T03:59:12.993 に答える