在 GridView 中动态更改 TextView

Change TextView Dynamically in GridView

我正在创建包含 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 中的值没有改变。

使用下面的代码:

     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();
            }
        });

试试这个,

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;    
    }
}

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

试试下面的代码:

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);
            }
        });`