简体   繁体   English

网格视图图像链接到活动

[英]Grid view image link to activites

I have hit a brick wall, a tutorial I have followed simply enlarges the images on click. 我碰到了一堵砖墙,我遵循的教程只是简单地单击放大图像。

what I want to do is for each image it opens a different activity. 我要为每个图像打开一个不同的活动。

eg the algebra image open the algebraactivity, decimal image on click opens decimal activity etc. 例如,代数图像打开代数活动,点击十进制图像打开十进制活动等。

this is probably simple, but it is not very obvious to me at the moment. 这可能很简单,但是目前对我来说还不是很明显。

Here is the main activity. 这是主要活动。

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.GridView;  
public class MathsSubjectsActivity extends Activity {

    // Keep all Images in array
    public Integer[] mThumbIds = {
        R.drawable.algebraicon,R.drawable.coordsicon,
        R.drawable.decimalsicon,R.drawable.fractionsicon,
        R.drawable.algebraicon,R.drawable.algebraicon,
        R.drawable.powersicon,R.drawable.algebraicon,
        R.drawable.coordsicon,R.drawable.algebraicon,
    }; 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.subjects);
        GridView gridView = (GridView) findViewById(R.id.grid_view); 
        // Instance of ImageAdapter Class 
        gridView.setAdapter(new ImageAdapter(this,mThumbIds)); 
 /**      * On Click event for Single Gridview Item      * */  
        gridView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                switch(position)
                {
                    case 0:
                        Intent login = new Intent(getApplicationContext(), MathsAlgebraActivity.class);
                        login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(login);
                        break;
                    case 1:
                        Intent coords = new Intent(getApplicationContext(), MathsMultiActivity.class);
                        coords.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(coords);
                        break;
                    case 2:
                        Intent decim = new Intent(getApplicationContext(), MathsMultiActivity.class);
                        decim.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(decim);
                        break;
                    //and so on for other activities.
                    default:
                        break;
                }
            }
        }); 
    }
}

Below is the image adapter which handles the images. 下面是处理图像的图像适配器。

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

private Context mContext;
private Integer[] resIds; 

//Constructor 
public ImageAdapter(Context c,Integer[] resIds){ 
    mContext = c;
    this.resIds=resIds;
}
@Override
public int getCount() {  
    return resIds.length;
}
@Override
public Object getItem(int position) {
    return resIds[position];
}
@Override
public long getItemId(int position) {
    return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView = new ImageView(mContext); 
    imageView.setImageResource(resIds[position]);  
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);   
    imageView.setLayoutParams(new GridView.LayoutParams(70, 70)); 
    return imageView;
}
}

can run case 0 but not 1 or 2. 可以运行情况0,但不能运行1或2。

errors from log: 日志错误:

    Thread [<1> main] (Suspended (exception ActivityNotFoundException)) 
Instrumentation.checkStartActivityResult(int, Object) line: 1405    
Instrumentation.execStartActivity(Context, IBinder, IBinder, Activity, Intent, int) line: 1379  
MathsSubjectsActivity(Activity).startActivityForResult(Intent, int) line: 2827  
MathsSubjectsActivity(Activity).startActivity(Intent) line: 2933    
MathsSubjectsActivity$1.onItemClick(AdapterView, View, int, long) line: 51  
GridView(AdapterView).performItemClick(View, int, long) line: 284   
AbsListView$PerformClick.run() line: 1812   
ViewRoot(Handler).handleCallback(Message) line: 587 
ViewRoot(Handler).dispatchMessage(Message) line: 92 
Looper.loop() line: 130 
ActivityThread.main(String[]) line: 3683    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line:     not available [native method]  
Method.invoke(Object, Object...) line: 507  
ZygoteInit$MethodAndArgsCaller.run() line: 839  
ZygoteInit.main(String[]) line: 597 
NativeStart.main(String[]) line: not available [native method]  

try something like below code 试试下面的代码

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

         switch(position)
         {
             case 0:
             startActivity(context, FirstActivity.class);
             break;
             case 1:
             startActivity(context, SecondActivity.class);
             break;
             .....
             ...
         }
    }
});

EDIT1 编辑1

    import android.app.Activity; 
        import android.content.Intent; 
        import android.os.Bundle; 
        import android.view.View; 
        import android.widget.AdapterView;
        import android.widget.AdapterView.OnItemClickListener; 
        import android.widget.GridView;  
        public class MathsSubjectsActivity extends Activity {   

        // Keep all Images in array
        public Integer[] mThumbIds = {        
        R.drawable.algebraicon,R.drawable.coordsicon,         
        R.drawable.decimalsicon,R.drawable.fractionsicon,  
        R.drawable.algebraicon,R.drawable.algebraicon,
        R.drawable.powersicon,R.drawable.algebraicon,        
        R.drawable.coordsicon,R.drawable.algebraicon, 
        }; 


         @Override    
         public void onCreate(Bundle savedInstanceState) {     
        super.onCreate(savedInstanceState);     
        setContentView(R.layout.subjects);  
        GridView gridView = (GridView) findViewById(R.id.grid_view); 
             // Instance of ImageAdapter Class    
        gridView.setAdapter(new ImageAdapter(this,mThumbIds)); 
             /**      * On Click event for Single Gridview Item      * */  
        gridView.setOnItemClickListener(new OnItemClickListener() {  

        @Override         
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {            
         switch(position)             
               {   
                case 0:                 
                   startActivity(this, AlgebraActivity.class);            
                        break;                    
                case 1:                   
                 startActivity(this, CoordsActivity.class);  
                                  break;    

                case 2: 
                startActivity(this,DecimalsActivity.class);
                break;
               //and so on for other activities.  
                default:
                break;                             

 } 


        }     
    }); 
    }   

} 

And the Adapter would look like : 适配器看起来像:

import android.content.Context;   
import android.view.View; 
import android.view.ViewGroup;  
import android.widget.BaseAdapter; 
import android.widget.GridView;  
import android.widget.ImageView;       
 public class ImageAdapter extends BaseAdapter {    
private Context mContext;      
private Integer[] resIds; 
//Constructor 
 public ImageAdapter(Context c,Integer[] resIds){ 
mContext = c;    
this.resIds=resIds
}    
@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 imageView = new ImageView(mContext); 
 imageView.setImageResource(mThumbIds[position]);  
 imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);   
 imageView.setLayoutParams(new GridView.LayoutParams(70, 70)); 
 return imageView;                    
 }                                 
  }   

EDIT 2: 编辑2:

As per the logs it looks there is no entry for the activity in manfest file. 根据日志,manfest文件中没有该活动的条目。 Do the following entry for the activity in your androidmanifest.xml 在androidmanifest.xml中为活动输入以下内容

<activity android:name="com.example.project.YourActivity"
                  . . . >
            . . .
        </activity>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM