为gridview上的每个图标指定一个字符串

时间:2013-11-23 17:19:10

标签: android eclipse gridview

我正在创建一个Android应用程序,我遇到了这个问题:我有一个具有gridview布局的MainActivity。此布局由6个图标组成。我想为每个图标添加2件事

1.点击:开始一项新活动(我想我知道该怎么做)

2.长按:显示与该图标和活动相关的/ res / values / strings的简短字符串

到目前为止,我已经设法为这两个行为制作占位符:

              super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);

          GridView gridview = (GridView) findViewById(R.id.gridview);
          gridview.setAdapter(new ImageAdapter(this));

          //for each gridview item, we want one click reaction (that creates a new Activity) and
          //a long click reaction, that shows an informative text on what this button does

            //Simple Click Action
            gridview.setOnItemClickListener(new OnItemClickListener() { 
                public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                    //Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show();
                    //placeholder. In future will be replaced with new activity creation
                }
            });

            //Long Click Action
            gridview.setOnItemLongClickListener(new OnItemLongClickListener(){
                public boolean onItemLongClick(AdapterView<?> parent, View v, int description, long id){
                    Toast.makeText(MainActivity.this, "" ,Toast.LENGTH_LONG).show();
                    return true;
                }
            });



    }

现在我要做的是在Toast.makeText函数中我要打印一个资源字符串。这个字符串对于每个图标都是不同的,所以我觉得它应该通过ImageAdapter类返回,它创建了gridview。 在该类中,除其他外,我创建了一个包含每个字符串的资源ID的数组。所以我的问题是:

a)如何返回该资源ID,以便MainActivity可以使用它?

b)如果有不同的方法,那是什么?

我是新手,所以我完全有可能犯了一些巨大的错误

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

点击后,您将获得已设置setOnItemClickListener的网格布局,切换view.getId()以便在swich中有6个案例,并根据需要在每个案例中进行转换,类似于吐司内setOnItemLongClickListener

中的案例

答案 1 :(得分:0)

onItemLongClick(...)中使用parent参数(应该是您的GridView)并调用...

ImageAdapter theAdapter = (ImageAdapter) parent.getAdapter();

在ImageAdapter中,只要您有返回字符串资源ID的方法,就可以使用position参数(在代码中名为description),例如......

int resId = theAdapter.getId(description);

然后Toast使用...

Toast.makeText(MainActivity.this, MainActivity.this.getString(resId),Toast.LENGTH_LONG).show();

答案 2 :(得分:0)

感谢您的有用答案。结果我发现了一个不同的解决方案,效果很好。

看到如何在gridview中“访问”图像,你创建对它们的引用,我创建了一个这样的引用的整数数组:

private Integer[] testDescriptions  = {
            R.string.reflexes_description,
            R.string.agility_description,
            R.string.intellect_description,
            R.string.strength_description,
            R.string.proximity_description,
            R.string.voice_description };

并实现了gridview.setOnItemLongClickListener,如下所示:

gridview.setOnItemLongClickListener(new OnItemLongClickListener(){
                public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id){
                    Toast toast = Toast.makeText(MainActivity.this, testDescriptions[position] ,Toast.LENGTH_LONG);
                    TextView v1 = (TextView) toast.getView().findViewById(android.R.id.message);
                    if( v1 != null) v1.setGravity(Gravity.CENTER);
                    toast.show();
                    return true;
                }
            });