[英]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.