2017-01-09 7 views
0

실수를 얻고 난있는 gridview에 setOnItemClickListener를 추가하기 위해 노력하고있어 나는 다음과 같은 오류가 무엇입니까 :이 코드 라인안드로이드는 -있는 gridview에 setonitemclicklistener을 추가하려고하고 안드로이드에 나는 새로운 오전

setOnItemClickListener in AdapterView cannot by applied to MainActivity

을 : grid.setOnItemClickListener(this);

내가 뭘 잘못하고 있니? 제발 도와 주실 수 있나요? 여기

내 코드

import android.graphics.Color; 
    import android.graphics.PorterDuff; 
    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.AdapterView; 
    import android.widget.BaseAdapter; 
    import android.widget.GridView; 
    import android.widget.ImageView; 
    import android.widget.TextView; 
    import android.widget.Toast; 
    import java.util.ArrayList; 
    import java.util.Random; 



    public class MainActivity extends AppCompatActivity { 

    GridView grid; 
    TextView tvTest; 
    TextView tvTest2; 
    Random rnd = new Random(); 
    int color; 
    ImageView imageView; 

    ArrayList<Integer> colorInts = new ArrayList<Integer>(); 

    ArrayList<Integer> itemsList = new ArrayList<Integer>(); 

    Integer[] items; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     grid = (GridView) findViewById(R.id.grid); 
     tvTest =(TextView) findViewById(R.id.tvTest); 
     tvTest2 =(TextView) findViewById(R.id.tvTest2); 

     adjustGridView(); 

     itemsList.add(R.drawable.lemon); 
     itemsList.add(R.drawable.lemon); 
     itemsList.add(R.drawable.lemon); 
     itemsList.add(R.drawable.lemon); 
     itemsList.add(R.drawable.lemon); 
     itemsList.add(R.drawable.lemon); 


     // ArrayList into Array 

     items = new Integer[ itemsList.size() ]; 
     itemsList.toArray(items); 


     grid.setAdapter(new CustomGridAdapter(this, items)); 
     grid.setOnItemClickListener(this); 

    } 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     // TODO Auto-generated method stub 
     Toast.makeText(MainActivity.this, "Clicked postion is " + arg2, 
       Toast.LENGTH_SHORT).show(); 

     tvTest.setText("Number of color: "+ colorInts); 
     tvTest2.setText("Number of color: "+ colorInts.get(arg2)); 


    } 


    // Here is your custom Adapter 

    public class CustomGridAdapter extends BaseAdapter { 
     private AppCompatActivity mContext; 

     // Keep all Images in array 
     public Integer[] mThumbIds; 

     // Constructor 
     public CustomGridAdapter(MainActivity mainActivity, Integer[] items) { 
      this.mContext = mainActivity; 
      this.mThumbIds = items; 
     } 

     @Override 
     public int getCount() { 
      return mThumbIds.length; 
     } 

     @Override 
     public Object getItem(int position) { 
      return mThumbIds[position]; 
     } 

     @Override 
     public long getItemId(int position) { 
      return 0; 
     } 



     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      imageView = new ImageView(mContext); 
      imageView.setImageResource(mThumbIds[position]); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setLayoutParams(new GridView.LayoutParams(70, 70)); 
      color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 
      imageView.setColorFilter(color, PorterDuff.Mode.SRC_ATOP); 
      colorInts.add(color); 



      return imageView; 
     } 



    } 

    private void adjustGridView() { 

     grid.setNumColumns(3); //(GridView.AUTO_FIT); 
     grid.setColumnWidth(80); 
     grid.setVerticalSpacing(5); 
     grid.setHorizontalSpacing(5); 

     grid.setStretchMode(GridView.NO_STRETCH); 

    } 

} 

이며, 여기에 activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="com.testrk.basiclayout001.MainActivity"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/myColor02" 
     android:layout_weight="2" 
     > 

     <TextView 
      android:id="@+id/tvTest" 
      android:background="@color/myColor04" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/myColor01" 
     android:focusable="false" 
     android:layout_weight="1" 
     > 

     <GridView 
      android:id="@+id/grid" 
      android:focusable="true" 
      android:clickable="true" 
      android:background="@color/myColor03" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:layout_marginBottom="10dp" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="10dp" 
      > 
     </GridView> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/myColor02" 
     android:layout_weight="2" 
     > 

     <TextView 
      android:id="@+id/tvTest2" 
      android:background="@color/myColor04" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 




    </LinearLayout> 

및 cell.xml입니다 :

<?xml version="1.0" encoding="utf-8"?> 
<ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/imgv" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" > 

</ImageView> 
+1

은 MainActivity 클래스의 AdapterView.OnItemSelectedListener를 구현합니다. – Nas

답변

0

setOnItemClickListener 방법은 맥락에서 고려하지 않습니다 인수로 OnItemClickListener 객체를 사용합니다. 필요한 것은 메서드 호출에서 새로운 OnItemClickListener를 전달한 다음 OnItemClick 메서드를 재정의하는 것입니다.

예 :

grid.setOnItemClickListener(new OnItemClickListener(){ 
    @Override 
    public void onItemClick(AdapterView<?> adapter, View v, int position, 
     long arg3) 
    { 
     //code to be executed on click 
    } 

나는이 질문에 대한 답변이 되었기를 바랍니다.

+0

정말 고마워요, 작동합니다! – Roman

+0

내가 도울 수있어서 기쁩니다! –