2012-04-19 62 views
1

我碰到了一堵砖墙,我所遵循的教程只是放大点击图像。网格视图图像链接到活动

我想要做的是为每个图像打开一个不同的活动。

如代数图像打开algebraactivity,上点击小数图像打开小数活动等

这可能是简单的,但不是很明显,我的时刻。

这是主要活动。

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; 
       } 
      } 
     }); 
    } 
} 

下面是处理图像的图像适配器。

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; 
} 
} 

可以运行的情况下0但从日志没有1或2

错误:

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] 
+0

您可以粘贴案例1,2的崩溃日志吗? – Deva 2012-04-19 11:41:15

+0

您的日志说您尚未在Manifest.xml中定义Activity MathsMultiActivity。请在清单中输入必要的条目。 – Deva 2012-04-19 15:02:49

回答

0

尝试像下面的代码

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; 
      ..... 
      ... 
     } 
    } 
}); 
0

EDIT1

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;        

} 


     }  
    }); 
    } 

} 
东西

和适配器将如下所示:

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;      
}         
    } 

编辑2:

按照日志中它看起来有在manfest文件中的活动没有条目。在您的androidmanifest.xml中执行以下活动:

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

你是否告诉我你的答案中的含义? – ManWithNoName 2012-04-19 11:14:45

+0

更改了我的答案。如果这有帮助。 – Deva 2012-04-19 11:35:44

+0

哪里mThumbIds是在图像适配器要求创建一个局部变量? – ManWithNoName 2012-04-19 11:45:50