【问题标题】:Change TextView Dynamically in GridView在 GridView 中动态更改 TextView
【发布时间】:2016-08-04 18:52:04
【问题描述】:

我正在创建包含 6 个项目 (2*3) 的网格视图。

我正在实现它以动态更改设置。

为此,我使用带有文本视图的网格视图。

my code is:

public class MyGridAdaptor extends BaseAdapter
{

    String[] keyPad = { "1", "2", "3", "4", "5", "6" };
    String[] functionName = {  "Wi-Fi", "Bluetooth", "GPS", "Brightness",   "Wi-Fi Tethering", "Mobile data", };
    String[][] functionStatus = { { "OFF", "ON" }, { "OFF", "ON" }, { "OFF", "ON" }, { "OFF", "ON" }, { "OFF", "ON" }, { "OFF", "ON" } };

    LayoutInflater inflater;
    Context mContext;
    TextView keyNumber, fName, fStatus;
    RelativeLayout gridItem;
    int counter = 0;

    public MyGridAdaptor(Context applicationContext)
    {
        this.mContext = applicationContext;
        inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View view = convertView;
        final int pos = position;

        if (view == null)
        {
            view = inflater.inflate(R.layout.grid_item, null);

            DisplayMetrics metrics = new DisplayMetrics();
            metrics = mContext.getResources().getDisplayMetrics();
            int height = metrics.heightPixels;
            int heightAdj = 85;
            view.setMinimumHeight((height - heightAdj) / 2);

            keyNumber = (TextView) view.findViewById(R.id.tvNo);
            fName = (TextView) view.findViewById(R.id.tvName);
            fStatus = (TextView) view.findViewById(R.id.tvStatus);
            gridItem = (RelativeLayout) view.findViewById(R.id.gridItem);

        }
        else
        {
            view.getTag();
        }
        keyNumber.setText(keyPad[position]);
        fName.setText(functionName[position]);
        fStatus.setText(functionStatus[position][0]);

        gridItem.setOnClickListener(new OnClickListener()
        {

            public void onClick(View v)
            {
                counter++;

                Toast.makeText(mContext, functionName[pos]+" "+pos+" "+(counter%2)+" "+functionStatus[pos][counter%2], Toast.LENGTH_SHORT).show();
                fStatus.setText(functionStatus[pos][counter%2]);

                notifyDataSetChanged();
            }
        });
        return view;
    }

    @Override
    public int getCount()
    {
        // TODO Auto-generated method stub
        return keyPad.length;
    }

    @Override
    public Object getItem(int position)
    {
        // TODO Auto-generated method stub
        return keyPad[position];
    }

    @Override
    public long getItemId(int position)
    {
        // TODO Auto-generated method stub
        return 0;
    }

}

我在 Toast 中获得了正确的值,但 Textview 中的值没有改变。

【问题讨论】:

  • 你为什么不为你的视图设置标签? view.setTag() 在哪里。从我所见,如果view == null 为假,您实际上并没有设置对 rStatus 的引用?
  • @Raju-san ,检查我的答案。

标签: android gridview textview android-adapter


【解决方案1】:

你为什么要这样做?将 onitemselected 侦听器设置为 gridview 并且在单击项目时,您将单击特定网格项目的索引。使用索引调用 getChildAtIndex(grid selected index)。这将返回相对布局并调用 relativelayout.getChildAtIndex(3)。这是你的文本视图。更新文字,尽情享受

【讨论】:

  • 它工作正常。我正在等待完全一样的解决方案。我不知道如何从 **setOnItemClickListener() 获取 childView **。这就是我尝试使用 Adapter 进行更改的原因。
【解决方案2】:

使用下面的代码:

     gridItem.setTag(position); // Added by Sagar Zala
     gridItem.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v)
            {
                int pos=(Integer)v.getTag(); // Added by Sagar Zala
                counter++;

                Toast.makeText(mContext, functionName[pos]+" "+pos+" "+(counter%2)+" "+functionStatus[pos][counter%2], Toast.LENGTH_SHORT).show();
                fStatus.setText(functionStatus[pos][counter%2]);

                notifyDataSetChanged();
            }
        });

【讨论】:

  • 你在返回视图之前忘记了 view.setTag(view) 语句;
  • @Raju-san,在返回视图前添加 view.setTag(view);声明
【解决方案3】:

试试这个,

public class MyGridAdaptor extends BaseAdapter
{

    String[] keyPad = { "1", "2", "3", "4", "5", "6" };
    String[] functionName = {  "Wi-Fi", "Bluetooth", "GPS", "Brightness",   "Wi-Fi Tethering", "Mobile data", };
    String[][] functionStatus = { { "OFF", "ON" }, { "OFF", "ON" }, { "OFF", "ON" }, { "OFF", "ON" }, { "OFF", "ON" }, { "OFF", "ON" } };

    LayoutInflater inflater;
    Context mContext;
    TextView keyNumber, fName, fStatus;
    RelativeLayout gridItem;
    int counter = 0;

    public MyGridAdaptor(Context applicationContext)
    {
        this.mContext = applicationContext;
        inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View view = convertView;
        final int pos = position;
        ViewHolder viewHolder = new ViewHolder();

        if (view == null)
        {
            view = inflater.inflate(R.layout.grid_item, null);

            DisplayMetrics metrics = new DisplayMetrics();
            metrics = mContext.getResources().getDisplayMetrics();
            int height = metrics.heightPixels;
            int heightAdj = 85;
            view.setMinimumHeight((height - heightAdj) / 2);

            viewHolder.keyNumber = (TextView) view.findViewById(R.id.tvNo);
            viewHolder.fName = (TextView) view.findViewById(R.id.tvName);
            viewHolder.fStatus = (TextView) view.findViewById(R.id.tvStatus);
            viewHolder.gridItem = (RelativeLayout) view.findViewById(R.id.gridItem);

            view.setTag(viewHolder);

        }
        else
        {
            viewHolder = (ViewHolder)view.getTag();
        }
        viewHolder.keyNumber.setText(keyPad[position]);
        viewHolder.fName.setText(functionName[position]);
        viewHolder.fStatus.setText(functionStatus[position][0]);

        gridItem.setOnClickListener(new OnClickListener()
        {

            public void onClick(View v)
            {
                counter++;

                Toast.makeText(mContext, functionName[pos]+" "+pos+" "+(counter%2)+" "+functionStatus[pos][counter%2], Toast.LENGTH_SHORT).show();
                viewHolder.fStatus.setText(functionStatus[pos][counter%2]);

                notifyDataSetChanged();
            }
        });
        return view;
    }

    @Override
    public int getCount()
    {
        // TODO Auto-generated method stub
        return keyPad.length;
    }

    @Override
    public Object getItem(int position)
    {
        // TODO Auto-generated method stub
        return keyPad[position];
    }

    @Override
    public long getItemId(int position)
    {
        // TODO Auto-generated method stub
        return 0;
    }

    private class ViewHolder {

        TextView keyNumber;
        TextView fName;
        TextView fStatus;
        RelativeLayout gridItem;    
    }
}

【讨论】:

  • 张贴logcat这里究竟是什么?
【解决方案4】:

试试下面的代码:

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

/*
                ImageView checkImage= (ImageView) view.findViewById(R.id.image);
                //checkImage.setTag(R.drawable.checkimg);

                //checkImage.setImageResource(R.drawable.checkimg);
                    checkImage.setBackgroundDrawable(new PaintDrawable(Color.BLUE));
                PaintDrawable drawable = (PaintDrawable) checkImage.getBackground();

                int color = drawable.getPaint().getColor();
                int drawableId = (Integer) checkImage.getTag();
                Log.d("getTag",String.valueOf(color));
  */

                TextView text = (TextView) view.findViewById(R.id.text);

                text.setText("Selected");
                //ImageView imageView = (ImageView) view;
                //imageView.setImageResource(R.drawable.checkimg);
            }
        });`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    相关资源
    最近更新 更多