簡體   English   中英

如何在GridView中的imageView中添加Click Listener?

[英]How to add click Listener in imageView that in GridView?

我是新來的,我在Android中開發簡單的Gallery App,因此遇到一些錯誤,然后想與您分享。 我的應用中包含的GridView 自定義布局適配器 ,以及自定義布局包含兩個imageViews,一個是圖像是主圖像 ,另一個是喜歡的圖標 .the 的GridViewsetOnItemClickListener即進入另一種方法Activity ,但我想補充onCLick最喜歡的方法影像檢視

這是截圖

當我運行該應用程序時,出現以下錯誤:

android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick

custom_layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<ImageView
    android:layout_width="300dp"
    android:layout_height="180dp"
    android:id="@+id/imageView"
    android:layout_marginTop="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:src="@drawable/xik_1"/>
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/favicon"
    android:src="@drawable/ic_favorite_black_24dp"
    android:layout_below="@id/imageView"
    android:layout_alignParentRight="true"
    android:layout_marginTop="-20dp"
    android:layout_marginRight="6dp"
    android:onClick="onClickViaMain"

    />

GridAdapter.java

public class GridAdapter extends BaseAdapter {
private int icons[];

// my images here
public int images[]={R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.xik_2,R.drawable.xik_3
        ,R.drawable.xik_1,R.drawable.xik_11,R.drawable.xik_12};

private Context context;
private String letters[];
private LayoutInflater inflater;

public GridAdapter(Context context){
    this.context=context;
    this.letters=letters;
    this.images=images;
}


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

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

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View gridView=convertView;
    if(convertView==null){
        // LayoutInflater
        inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        // my custom layout
        gridView=inflater.inflate(R.layout.custom_layout,null);
    }

    // images on the gridView (Android icon)
    ImageView imageView=(ImageView) gridView.findViewById(R.id.imageView);

    imageView.setImageResource(images[position]);

    return gridView;
}

}

MainActivity.java

public class MainActivity extends AppCompatActivity {

GridView gridView;
GridAdapter gridAdapter;
ImageView fav;

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




    gridView=(GridView) findViewById(R.id.gridView1);

    // Adapter class
    gridAdapter=new GridAdapter(MainActivity.this);

    //initializing favourite icon
    fav=(ImageView)findViewById(R.id.favicon);
    gridView.setAdapter(gridAdapter);
    gridView.setFastScrollEnabled(true);

    // gridView setting click listener
    //goes another Activity
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent =new Intent(getApplicationContext(),SliderActivity.class);
            intent.putExtra("index",position);
            startActivity(intent);
        }
    });



}

public void onClickViaMain(View v){
    if (fav.isPressed()){
        Toast.makeText(getApplicationContext(),"Added to Favourites",Toast.LENGTH_SHORT).show();
    }

}

現在,我想要做的onClick這個圖片瀏覽(喜愛)MainActivity,你會建議我?

好,我收到您的要求,請按照此處的步驟

1. remove  android:onClick="onClickViaMain" from favicon imageView to avoid crash from xml layout

2. MainActivity extends AppCompatActivity implements View.OnClickListener {

@Override
public void onClick(View v) {
           // handle click  
      }            

// other code 
} 


3. public class GridAdapter extends BaseAdapter {
// other code 
View.OnClickListener listener;
public GridAdapter(Context context,View.OnClickListener listener){

    this.listener=listener;
    this.context=context;
    this.letters=letters;
    this.images=images;
}
// other code here

Inside getView Method of your Adapter do like below 

    // images on the gridView (Android icon)
    ImageView favicon=(ImageView) gridView.findViewById(R.id.favicon);

    favicon.setImageResource(images[position]);
    **favicon.setOnClickListener(listener);**



4. In Main Activity update line 

    gridAdapter=new GridAdapter(MainActivity.this);

    gridAdapter=new GridAdapter(MainActivity.this,MainActivity.this);


// because we implemented OnclickListener in MainActivity  and we are done  

嘗試這個

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        ImageView favImage=(ImageView)view.findViewById(R.id.favImage);
        favImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Do your code
                Intent intent =new Intent(getApplicationContext(),SliderActivity.class);
                intent.putExtra("index",position);
                startActivity(intent);
            }
        });

    }
});

您可以像這樣實現圖像點擊活動。 希望這對您有幫助...如果您仍然遇到任何問題,請告訴我。

另一個解決方案是從MainActivity中刪除onItemClick方法,並在GridAdapter中實現圖像視圖的onClick方法

看起來像

public class GridAdapter extends BaseAdapter {
private int icons[];

// my images here
public int images[] =
        {R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.xik_2,
                R.drawable.xik_3, R.drawable.xik_1, R.drawable.xik_11, R.drawable.xik_12};

private Context context;
private String letters[];
private LayoutInflater inflater;

public GridAdapter(Context context) {
    this.context = context;
    this.letters = letters;
    this.images = images;
}


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

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

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View gridView = convertView;
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    // my custom layout
    gridView = inflater.inflate(R.layout.custom_layout, null);
    // images on the gridView (Android icon)
    ImageView imageView = (ImageView) gridView.findViewById(R.id.imageView);
    ImageView favImage=(ImageView) gridView.findViewById(R.id.favicon);

    imageView.setImageResource(images[position]);
    favImage.setImageResource(images[position]);

    imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context, SliderActivity.class);
            intent.putExtra("index", position);
            context.startActivity(intent);
        }
    });

    favImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context, SliderActivity.class);
            intent.putExtra("index", position);
            context.startActivity(intent);
        }
    });

    return gridView;
}
}

嘗試這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM