单击android中的gridview的特定项目时如何刷新其他项目

哈姆扎·波拉特(Hamza Polat)

我创建了一个包含gridview的新布局。运行该应用程序时,gridview正在获取预期的内容。

gridview的每个单元格都有一个普通的特定模板。单击一个单元格时,新模板将加载到该单元格中。到目前为止,在@wanglugao的帮助下,一切正常

现在,我想在单击项目时通过普通模板刷新未单击的项目。仅单击的项目需要包括新模板。但是,当我单击一个项目时,即使我单击了另一个项目,它也保留在新模板中。

图片链接说明了我当前的状态

这是我的BaseAdapter,

public class KategoriAdapter extends BaseAdapter{

private Context mContext;
private String[] categoryValues;
private Bitmap[] pictures;
private String mTag = "NORMAL_TEMPLATE";


//indicate that position using new template
private int mNewTemplatePos = -1;

//indicate that this  is normal template view
private final String NORMAL_TEMPLATE = "NORMAL_TEMPLATE";

//indicate that this  is new template view
private final String NEW_TEMPLATE = "NEW_TEMPLATE";

public KategoriAdapter(Context context, String[] categoryValues, Bitmap[] pictures) {
    this.mContext = context;
    this.categoryValues = categoryValues;
    this.pictures = pictures;
}

//apply new template to positon
public void useNewTemplate(int pos) {
    mNewTemplatePos =pos;
    //notiy list that data has changed and the list will refresh ui itself.
    notifyDataSetChanged();
}

@Override
public int getCount() {
    return categoryValues.length;
}


@Override
public Object getItem(int possition) {
    return null;
}

@Override
public long getItemId(int possition) {
    return 0;
}

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

    final LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {

        if (mNewTemplatePos==possition) {
            convertView = getNewTemplate(inflater, possition);
            //use tag to indicate the type of the template
            convertView.setTag(NEW_TEMPLATE);
        } else {
            convertView = getNormalTemplate(inflater, possition);
            convertView.setTag(NORMAL_TEMPLATE);
            mTag = (String) convertView.getTag();
        }


    } else {
        switch (mTag) {
            case NORMAL_TEMPLATE:
                //convertView is the normal template view but you need a new template view in possition
                if (mNewTemplatePos==possition)
                    convertView = getNewTemplate(inflater, possition);
                break;
            case NEW_TEMPLATE:
                //convertView is the new template view but you need a normal template view in possition
                if (mNewTemplatePos!=possition)
                    convertView = getNormalTemplate(inflater, possition);
                break;
            default:
                break;
        }
    }
    return convertView;
}


private View getNormalTemplate(LayoutInflater inflater, int possition) {

    final View grid = inflater.inflate(R.layout.kategoriler_list_item, null);
    TextView cName = (TextView) grid.findViewById(R.id.grid_item_ad);
    ImageView categoryPictures = (ImageView) grid.findViewById(R.id.grid_item_resim);
    cName.setText(categoryValues[possition]);
    categoryPictures.setImageBitmap(pictures[possition]);
    return grid;

}

private View getNewTemplate(LayoutInflater inflater, int possition) {

    final View grid = inflater.inflate(R.layout.kategori_secenek_template, null);
    TextView cName = (TextView) grid.findViewById(R.id.grid_item_ad);
    cName.setText(categoryValues[possition]);
    Button btn_nesne_tani = (Button) grid.findViewById(R.id.btn_nesneleri_taniyalim);
    Button btn_cumle_kur = (Button) grid.findViewById(R.id.btn_cumle_kuralim);


    btn_nesne_tani.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(mContext,"nesne",Toast.LENGTH_SHORT).show();
        }
    });

    btn_cumle_kur.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(mContext,"cümle",Toast.LENGTH_SHORT).show();
        }
    });

    return grid;
}

}

和我的Activity.java的相关部分

 }

    final KategoriAdapter adapter = new KategoriAdapter(getApplicationContext(), mKategoriler, kategoriResimleri);
    grid=(GridView)findViewById(R.id.gv_kategoriler);
    grid.setAdapter(adapter);
    grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            adapter.useNewTemplate(position);
            Toast.makeText(getApplicationContext(), mKategoriler[position].toString(),Toast.LENGTH_SHORT).show();
        }
    });

提前致谢。

杰弗里·布拉特曼

问题是您对的使用mTag您只能使用此选项来确定转换视图不为null时要使用的模板,而只能在扩展新的转换视图时进行设置。

mTag不应是实例字段。它应该是您(始终)在您的getView()方法中设置的本地像这样

Tag tag = mNewTemplatePos==possition ? NEW : NORMAL;
switch (tag) {
  // inflate base on the tag
}

另外,您没有正确使用转换视图。在某些情况下,您会将其丢弃。如果您的网格中有两个非常不同的单元格,则应使用视图类型(Google),也可以使用一种布局,并通过隐藏或显示部分来改变它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单击列表视图的项目时如何去其他活动?

来自分类Dev

部署Scrapy项目时如何在egg中包含其他文件和目录

来自分类Dev

如何在项目点击时重定向到Android中的其他Activity

来自分类Dev

如何在android中第二次单击时在gridview中取消选择项目?

来自分类Dev

Android:响应项目单击的多个gridView行

来自分类Dev

如何访问GridView /数组中的特定项目(在Android应用程序中)

来自分类Dev

在项目资源管理器中右键单击时,如何将在“新建”->“文件”->“其他”中创建的向导添加到弹出菜单中

来自分类Dev

单击angular js中的特定菜单时如何关闭所有其他菜单?

来自分类Dev

如何生成其他项目?

来自分类Dev

如何通过单击操作栏中溢出图标下的项目来调用其他活动

来自分类Dev

单击时如何添加特定项目innerText

来自分类Dev

在离子搜索栏中搜索其他项目时,如何保持选中的项目?

来自分类Dev

当其他项目正常工作时,为什么不能点安装该特定github项目?

来自分类Dev

如何从数据库中选择任何特定项目并在其他页面中显示

来自分类Dev

单击其他项目时,如何从先前的选择中删除班级?

来自分类Dev

Android:选择微调器项目时,如何提示其他详细信息

来自分类Dev

根据单击的项目操作ListView中的其他列表项目

来自分类Dev

当我单击ListView中的另一个项目时,如何访问其他项目的textview?

来自分类Dev

单击gridview的项目时的android动画

来自分类Dev

Android:响应项目单击的多个gridView行

来自分类Dev

如何访问GridView /数组中的特定项目(在Android应用程序中)

来自分类Dev

单击其他页面中的项目时获得listview值。xaml

来自分类Dev

单击项目时,使其他项目可见

来自分类Dev

如何通过单击操作栏中溢出图标下的项目来调用其他活动

来自分类Dev

[Robotium]如何滚动并单击GridVIew中的项目?

来自分类Dev

单击listview的项目时,如何使其视图颜色为红色,其他为黑色?

来自分类Dev

当我在 jQuery 中打开其他手风琴项目时,如何使同级展开项目折叠?

来自分类Dev

单击android中的按钮时如何验证recyclerView项目

来自分类Dev

如何使特定项目响应 recyclerView 中的单击

Related 相关文章

  1. 1

    单击列表视图的项目时如何去其他活动?

  2. 2

    部署Scrapy项目时如何在egg中包含其他文件和目录

  3. 3

    如何在项目点击时重定向到Android中的其他Activity

  4. 4

    如何在android中第二次单击时在gridview中取消选择项目?

  5. 5

    Android:响应项目单击的多个gridView行

  6. 6

    如何访问GridView /数组中的特定项目(在Android应用程序中)

  7. 7

    在项目资源管理器中右键单击时,如何将在“新建”->“文件”->“其他”中创建的向导添加到弹出菜单中

  8. 8

    单击angular js中的特定菜单时如何关闭所有其他菜单?

  9. 9

    如何生成其他项目?

  10. 10

    如何通过单击操作栏中溢出图标下的项目来调用其他活动

  11. 11

    单击时如何添加特定项目innerText

  12. 12

    在离子搜索栏中搜索其他项目时,如何保持选中的项目?

  13. 13

    当其他项目正常工作时,为什么不能点安装该特定github项目?

  14. 14

    如何从数据库中选择任何特定项目并在其他页面中显示

  15. 15

    单击其他项目时,如何从先前的选择中删除班级?

  16. 16

    Android:选择微调器项目时,如何提示其他详细信息

  17. 17

    根据单击的项目操作ListView中的其他列表项目

  18. 18

    当我单击ListView中的另一个项目时,如何访问其他项目的textview?

  19. 19

    单击gridview的项目时的android动画

  20. 20

    Android:响应项目单击的多个gridView行

  21. 21

    如何访问GridView /数组中的特定项目(在Android应用程序中)

  22. 22

    单击其他页面中的项目时获得listview值。xaml

  23. 23

    单击项目时,使其他项目可见

  24. 24

    如何通过单击操作栏中溢出图标下的项目来调用其他活动

  25. 25

    [Robotium]如何滚动并单击GridVIew中的项目?

  26. 26

    单击listview的项目时,如何使其视图颜色为红色,其他为黑色?

  27. 27

    当我在 jQuery 中打开其他手风琴项目时,如何使同级展开项目折叠?

  28. 28

    单击android中的按钮时如何验证recyclerView项目

  29. 29

    如何使特定项目响应 recyclerView 中的单击

热门标签

归档