public class MainActivity extends Activity {
GridView grid;
ImageView imgview;
int img=R.drawable.ic_launcher;
int []imageids=new int []{img,R.drawable.sxq1,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,img,R.drawable.sxq2,img,R.drawable.sxq1,img,img,img,img,img,img,img,img};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<Map<String,Object>> listItems=new ArrayList<Map<String,Object>>();
for(int i=0;i<imageids.length;i++)
{
Map<String, Object> listItem = new HashMap<String, Object>();
listItem.put("image", imageids[i]);
listItems.add(listItem);
}
// 获取显示图片的ImageView
imgview = (ImageView) findViewById(R.id.imageview);
// 创建一个SimpleAdapter
SimpleAdapter simpleAdapter = new SimpleAdapter(this,
listItems
// 使用/layout/cell.xml文件作为界面布局
, R.layout.cell, new String[] { "image" },
new int[] { R.id.image1 });
grid = (GridView) findViewById(R.id.grid1);
// 为GridView设置Adapter
grid.setAdapter(simpleAdapter);
// 添加列表项被选中的监听器
grid.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id)
{
// 显示当前被选中的图片
imgview.setImageResource(imageids[position]);
System.out.println("select");
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
}
});
// 添加列表项被单击的监听器
grid.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
// 显示被单击的图片
imgview.setImageResource(imageids[position]);
view.setBackgroundColor(Color.RED);
System.out.println("click");
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
これはグリッドビュー項目の再利用に関連しており、位置 0 をクリックすると、2 番目のページにスライドすると、赤い項目が再利用されるため、最初のページも赤くなります。再利用は記憶のためです。Baidu でリストビューのアイテムを再利用しましょう。これは非常に古典的で古いことです。最善の方法は、Java クラスを使用して各項目の赤色のステータスを記録することです。そうすれば問題は発生しません
View child = parent.getChildAt(position);
を使用してクリック ビューを取得し、child.setBackgroundColor(Color.RED);
を呼び出して効果を確認します。