[英]Set button and imageview in gridview and how to set each of them listener
[英]How to add click Listener in imageView that in GridView?
我是新來的,我在Android中開發簡單的Gallery App,因此遇到一些錯誤,然后想與您分享。 我的應用中包含的GridView 自定義布局和適配器 ,以及自定義布局包含兩個imageViews,一個是圖像是主圖像 ,另一個是喜歡的圖標 .the 的GridView有setOnItemClickListener
即進入另一種方法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.