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