Android GridView自定义,如何选择单个项目
在我的应用程序中,我自定义了gridview以显示标题和子项。但我无法选择单个项目。我的代码如下 主要活动Android GridView自定义,如何选择单个项目,android,gridview,Android,Gridview,在我的应用程序中,我自定义了gridview以显示标题和子项。但我无法选择单个项目。我的代码如下 主要活动 public class MainActivity extends Activity { private TextView tv; private GridView gv; private GridAdapter ga; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(sav
public class MainActivity extends Activity {
private TextView tv;
private GridView gv;
private GridAdapter ga;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.TextMsg);
gv = (GridView)findViewById(R.id.gridView);
ga = new GridAdapter(this);
gv.setAdapter(ga);
GridAdapter.Item item = new GridAdapter.Item();
item.set("Header1", "Item1_1", "Item1_2", "Item1_3");
ga.add(item);
item = new GridAdapter.Item();
item.set("Header2", "Item2_1", "Item2_2", "Item2_3");
ga.add(item);
item = new GridAdapter.Item();
item.set("Header3", "Item3_1", "Item3_2", "Item3_3");
ga.add(item);
}
}
GridAdapter.java
package com.example.testapplication;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class GridAdapter extends ArrayAdapter<GridAdapter.Item> {
private LayoutInflater m_vi = null;
private GridAdapter.Item m_item = null;
private ViewHolderItem m_holderItem = null;
public GridAdapter(Context context) {
super(context, 0);
m_vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
m_item = (GridAdapter.Item)getItem(position);
if (convertView == null || !convertView.getTag().equals(m_holderItem)){
convertView = m_vi.inflate(R.layout.mygrid, null);
m_holderItem = new ViewHolderItem();
convertView.setTag(m_holderItem);
}
else {
m_holderItem = (ViewHolderItem) convertView.getTag();
}
m_holderItem.tvHeader = (TextView)convertView.findViewById(R.id.gridhead);
m_holderItem.tvItem1 = (TextView) convertView.findViewById(R.id.gridtext1);
m_holderItem.tvItem2 = (TextView) convertView.findViewById(R.id.gridtext2);
m_holderItem.tvItem3 = (TextView) convertView.findViewById(R.id.gridtext3);
m_holderItem.tvHeader.setText(m_item.getHeader());
m_holderItem.tvItem1.setText(m_item.getItem1());
m_holderItem.tvItem2.setText(m_item.getItem2());
m_holderItem.tvItem3.setText(m_item.getItem3());
return convertView;
}
public static class ViewHolderItem {
public TextView tvHeader;
public TextView tvItem1;
public TextView tvItem2;
public TextView tvItem3;
}
public static class Item {
public String Header, Item1, Item2, Item3;
public Item(){
this.Header = "";
this.Item1 = "";
this.Item2 = "";
this.Item3 = "";
}
public void set(String Header_i, String Item1_i, String Item2_i, String Item3_i) {
this.Header = Header_i;
this.Item1 = Item1_i;
this.Item2 = Item2_i;
this.Item3 = Item3_i;
}
public String getHeader(){
return this.Header;
}
public String getItem1(){
return this.Item1;
}
public String getItem2(){
return this.Item2;
}
public String getItem3(){
return this.Item3;
}
}
}
package com.example.testapplication;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ImageView;
导入android.widget.TextView;
公共类GridAdapter扩展ArrayAdapter{
专用布局器m_vi=空;
私有GridAdapter.Item m_Item=null;
private ViewHolderItem m_holderItem=null;
公共GridAdapter(上下文){
超级(上下文,0);
m_vi=(LayoutInflater)context.getSystemService(context.LAYOUT\u充气器\u服务);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
m_item=(GridAdapter.item)getItem(position);
if(convertView==null | |!convertView.getTag().equals(m_holderItem)){
convertView=m_vi.充气(R.layout.mygrid,null);
m_holderItem=新视图holderItem();
setTag(m_holderItem);
}
否则{
m_holderItem=(ViewHolderItem)convertView.getTag();
}
m_holderItem.tvHeader=(TextView)convertView.findViewById(R.id.gridhead);
m_holderItem.tvItem1=(TextView)convertView.findViewById(R.id.gridtext1);
m_holderItem.tvItem2=(TextView)convertView.findViewById(R.id.gridtext2);
m_holderItem.tvItem3=(TextView)convertView.findViewById(R.id.gridtext3);
m_holderItem.tvHeader.setText(m_item.getHeader());
m_holderItem.tvItem1.setText(m_item.getItem1());
m_holderItem.tvItem2.setText(m_item.getItem2());
m_holderItem.tvItem3.setText(m_item.getItem3());
返回视图;
}
公共静态类ViewHolderItem{
公共文本视图标题;
公共文本视图TVTItem1;
公共文本视图项目2;
公共文本视图项目3;
}
公共静态类项{
公共字符串头,Item1,Item2,Item3;
公共项目(){
此.Header=“”;
本条第1款=”;
本条第2款=”;
本条第3款=”;
}
公共无效集(字符串头\u i、字符串项1\u i、字符串项2\u i、字符串项3\u i){
this.Header=Header\u i;
this.Item1=Item1_i;
this.Item2=Item2_i;
this.Item3=Item3_i;
}
公共字符串getHeader(){
返回此.Header;
}
公共字符串getItem1(){
返回此项。第1项;
}
公共字符串getItem2(){
返回此项。第2项;
}
公共字符串getItem3(){
返回此项。第3项;
}
}
}
mygrid xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/gridhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/gridtext1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<View
android:layout_width="20dp"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/gridtext2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<View
android:layout_width="20dp"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/gridtext3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<View
android:layout_width="wrap_content"
android:layout_height="5dp"
/>
</LinearLayout>
呈现形象
我只想要下面这样的o/p
只选择item2-2因为您想要选择的项目不是不同的gridview项目,而是gridview项目的子项,我相信您唯一的选择是为您在getView方法中添加的每个textview设置onClickListeners,并编写自己的代码来着色“选定”textview的背景,将上一个文本视图恢复为正常颜色等 它还需要相当好地理解适配器视图是如何回收的,等等 编辑:概述如何完成此任务: 这是一项事业。我能为您发布的最好内容是一个很好的提纲:
是的,你能用一些例子解释一下吗?我能提供的最好的例子是上面的大致轮廓。视图回收是您需要注意的最大陷阱。