Android-Gridview,自定义布局

Android-Gridview,自定义布局,android,android-gridview,Android,Android Gridview,我有一个GridView,里面有两个TextView,当填充GridView时,会设置一个OnClickListener,返回所选项目的位置。我想在选择一个TextView时触发一个方法 这可能吗?如果是,如何设置 编辑3: 在填充GridView的活动中:我从Strings.xml中检索字符串数组,一个for循环检查数组中的每个项目,并根据共享引用中的项目名称搜索条件,该for循环仅用于计算有多少个“true”条件存在,因此它检索保存在计数中的int。然后创建一个新的String[],这需要在

我有一个GridView,里面有两个TextView,当填充GridView时,会设置一个OnClickListener,返回所选项目的位置。我想在选择一个TextView时触发一个方法

这可能吗?如果是,如何设置

编辑3

在填充GridView的活动中:我从
Strings.xml
中检索
字符串数组
,一个
for循环
检查数组中的每个项目,并根据共享引用中的项目名称搜索条件,该
for循环
仅用于计算有多少个“true”条件存在,因此它检索保存在
计数中的
int
。然后创建一个新的
String[]
,这需要在向其添加项目之前给出一个精确的长度,因此我检查
count
如果大于0,它将给
String[]
一个
count
长度,然后另一个
for loop
将每个
true
添加到
字符串[]
我们刚刚创建的列表。如果
count
为0(在循环的第一个
中找不到真实条件),则只有1项添加到
字符串[]
,并给出值“未添加收藏夹”

然后是GridView的OnItemClickListener()


我假设您正在使用自定义适配器填充此
GridView
,并将
上下文作为参数传递给构造函数

在自定义适配器中,应将
onClickListeners
添加到
textview
。使用上下文,您可以从活动中调用方法:

((CallingActivityName)context).methodYouWishToCall(parameters);
这将进入
onClickListeners

编辑:添加了一些代码:

public class MyGridAdapter extends BaseAdapter {

    private final List<MyObjectClass> mEntries;
    private final LayoutInflater mInflater;
    private final Context mContext; 

    public static class ViewHolder {
        public TextView tx;
    }

    public MyGridAdapter(CallingActivityName context, List<MyObjectClass> entries) {
        super();
        mEntries = entries;
        mContext = context;
        mInflater = (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return mEntries.size();
    }

    @Override
    public Object getItem(int position) {
        return mEntries.get(position);
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        final ViewHolder holder;

        if (convertView == null) {

            convertView = mInflator.inflate(R.layout.favitemlayout, parent, false);
            holder = new ViewHolder();

            holder.tx = (TextView) convertView
                .findViewById(R.id.favgridremoveitem);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        final MyObjectClass info = mEntries.get(position);

        holder.tx.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        ((CallingActivityName)mContext).favRemove(info);
                        notifyDataSetChanged();
                    }
        });

        return convertView;
    }

}
公共类MyGridAdapter扩展了BaseAdapter{
私人最终名单;
私人最终布局平面图;
私有最终上下文mContext;
公共静态类视图持有者{
公共文本视图;
}
公共MyGridAdapter(调用ActivityName上下文,列表项){
超级();
mEntries=条目;
mContext=上下文;
mInflater=(LayoutInflater)mContext
.getSystemService(上下文布局\充气机\服务);
}
@凌驾
public int getCount(){
返回mEntries.size();
}
@凌驾
公共对象getItem(int位置){
返回mEntries.get(位置);
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终持票人;
if(convertView==null){
convertView=mInflator.inflate(R.layout.favitemlayout,父项,false);
holder=新的ViewHolder();
holder.tx=(TextView)convertView
.findViewById(R.id.favgridremoveitem);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
最终MyObjectClass信息=mEntries.get(位置);
holder.tx.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
((调用活动名称)mContext.favRemove(信息);
notifyDataSetChanged();
}
});
返回视图;
}
}

因此,
CallingActivityName
是启动适配器的活动的名称以及需要调用的方法所在的位置
info
是在gridview的位置
position
处保存的对象
MyObjectClass
是列表中对象的类名
mEntries

请参见上面的编辑:)我有一个小问题。我想将其设置为这样,当单击GridView的项时,它会触发onItemClickListener,但当单击项的textview时,它会触发您设计的此方法。这是适配器,我试图将您的代码植入其中,但我丢失了。见上面的编辑2。到目前为止,我只添加了getView()代码。我在答案中添加了一些代码。如果代码中有不清楚的地方,请随时询问。我有几个问题要问你。你能解释一下网格项目包含什么吗?您在哪里使用
字符串
数组
s
?在
final MyObjectClass info=mEntries.get(位置)行中
,您需要将
MyObjectClass
更改为
String
,将
mEntries
更改为
s
。另外,在重写的
getItem(int位置)
方法中,替换
返回位置返回s[position]
进行编码>。您还需要静态ViewHolder类。将
public静态类ViewHolder{public TextView tx;}
粘贴在
String s[]之后。您可以发布布局文件
R.layout.favitemlayout
?GridView包含喜爱的项目列表。这些项位于s数组中。在活动内创建GridView适配器时,它将s数组传递给适配器的构造函数。编辑:gridview中的每个项目都有收藏夹的名称和一个文本视图,上面写着“删除”。当按下名称时,它会打开该项-这是我的活动中的GridView onClickListener。当按下Remove时,它检索GridView项目的项目名称/位置,并调用favRemove(),该函数将处理该信息并从列表中删除该项目。请参见上面的编辑3。这是我的原始代码,解释了它的功能。我需要它列出我最喜欢的项目,每个项目都有自己的删除按钮(TextView),按下该按钮时,会调用favRemove(String itemName,int itemPos)。但是,如果项目本身被按下(而不是里面的移除按钮),我希望它触发OnItemClickListener:正如您在上面的Edit 3代码中看到的,这已经设置好了。如果你能让这个部件正常工作,我就从那里开始
((CallingActivityName)context).methodYouWishToCall(parameters);
public class MyGridAdapter extends BaseAdapter {

    private final List<MyObjectClass> mEntries;
    private final LayoutInflater mInflater;
    private final Context mContext; 

    public static class ViewHolder {
        public TextView tx;
    }

    public MyGridAdapter(CallingActivityName context, List<MyObjectClass> entries) {
        super();
        mEntries = entries;
        mContext = context;
        mInflater = (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return mEntries.size();
    }

    @Override
    public Object getItem(int position) {
        return mEntries.get(position);
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        final ViewHolder holder;

        if (convertView == null) {

            convertView = mInflator.inflate(R.layout.favitemlayout, parent, false);
            holder = new ViewHolder();

            holder.tx = (TextView) convertView
                .findViewById(R.id.favgridremoveitem);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        final MyObjectClass info = mEntries.get(position);

        holder.tx.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        ((CallingActivityName)mContext).favRemove(info);
                        notifyDataSetChanged();
                    }
        });

        return convertView;
    }

}