在GridView中动态改变TextView



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

你为什么要这样做?将onitemselected监听器设置为gridview,并在项目单击上,您将有特定网格项目的索引单击。使用索引调用getChildAtIndex(网格选定索引)。这将返回相对布局并调用relativelayout.getChildAtIndex(3)。这是你的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();
            }
        });

try this,

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

试试下面的代码:

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

最新更新