首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调用OnClick事件时更新ListView中行的布局

调用OnClick事件时更新ListView中行的布局
EN

Stack Overflow用户
提问于 2014-04-11 19:33:08
回答 1查看 339关注 0票数 0

我有一个ListView,其中有一个TextView和一个自定义视图,我在其中绘制一个矩形。我想要一个功能,当一行ListView被点击时,矩形应该变得更大,但其他行的矩形应该保持其以前的形状。

因此,我首先增加布局的宽度和高度,然后尝试增加矩形的大小,但是虽然在单击侦听器时会调用onDraw()方法,但矩形的大小并没有增加。

此外,我的DrawView的onDraw()方法被无限调用,即使我只单击了一次,任何人都可以帮助我。

DrawView.java,用于制作矩形

代码语言:javascript
运行
复制
public class DrawView extends View {
    Paint paint = new Paint();
    public int x=-1;   // this variable will tell 

    public DrawView(Context context) {
        this(context, null);            
    }

    public DrawView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public DrawView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void onDraw(Canvas canvas) {
        paint.setStrokeWidth(10);
        paint.setColor(Color.MAGENTA);
        Log.e("Ronak","onDraw  "+x);

        canvas.drawRect(0, 0, 300, 200, paint );
        if(x>=0)  //this method is not called for first view but is called for onClickListener
        {
            increase(canvas);
        }


    }

    private void increase(Canvas canvas) {
        Log.e("Ronak","Increase");
        canvas.drawRect(0, 0, 700, 800, paint );

    }




}

我的自定义ListView的getView()函数

代码语言:javascript
运行
复制
        public View getView(final int position,  View convertView, final ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
                        holder = new ViewHolder();
                        convertView = mInflater.inflate(R.layout.news_list_item,null);
                        final LinearLayout layout = (LinearLayout)convertView.findViewById(R.id.mainLayout);
                           TextView t= (TextView)convertView.findViewById(R.id.textView1);
                        holder.textview = t;
                        holder.ll=layout;
                        final DrawView abc = (DrawView)convertView.findViewById(R.id.drawview);
                        holder.drawview=abc;
                        Log.e("Ronak","reached here3");            
                        convertView.setTag(holder);
        } else {
            holder = (ViewHolder)convertView.getTag();
        }
        holder.textview.setText(mData.get(position));


        convertView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
             Toast.makeText(c, "Clicked on="+position, 2).show();
             ViewHolder mH = (ViewHolder) v.getTag();
             LinearLayout.LayoutParams pp = new LinearLayout.LayoutParams(500,400);
             mH.ll.setLayoutParams(pp);
             DrawView dd=mH.drawview;
             dd.x=position;
             dd.invalidate();
                }
        });

        return convertView;



    }

     static class ViewHolder {
            public DrawView drawview;
            public TextView textview;
            public LinearLayout ll;
        } 

和我的ListView每一行的布局文件

代码语言:javascript
运行
复制
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="2dp" >


    <TextView
        android:id="@+id/textView1"
        android:layout_width="50dp"
        android:layout_height="30dp"
        android:text="Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <com.krish.horizontalscrollview.DrawView
        android:id="@+id/drawview"
        android:layout_width="150dp"
        android:layout_height="100dp" >
    </com.krish.horizontalscrollview.DrawView>

</LinearLayout> 

我的ListView类

代码语言:javascript
运行
复制
    public class CenterLockHorizontalScrollview extends HorizontalScrollView {
    Context context;
    int prevIndex = 0;

    public CenterLockHorizontalScrollview(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
        this.setSmoothScrollingEnabled(true);

    }



    public void setAdapter(Context context, CustomListAdapter mAdapter) {

        try {
            fillViewWithAdapter(mAdapter);
        } catch (ZeroChildException e) {

            e.printStackTrace();
        }
    }

    private void fillViewWithAdapter(CustomListAdapter mAdapter)
            throws ZeroChildException {
        if (getChildCount() == 0) {
            throw new ZeroChildException(
                    "CenterLockHorizontalScrollView must have one child");
        }
        if (getChildCount() == 0 || mAdapter == null)
            return;

        ViewGroup parent = (ViewGroup) getChildAt(0);

        //parent.removeAllViews();

        for (int i = 0; i < mAdapter.getCount(); i++) {
            parent.addView(mAdapter.getView(i, null, parent));
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2014-04-11 19:42:11

我假设您在mData中存储了一个字符串列表。创建一个成员为mData和mIsSelected (布尔值)的类,并在适配器中传递该类的对象。在onClick()中,检查行是否已被选中,反转mIsSelected的值,并在结束调用notifyDataSetChanged()时执行所需的操作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23011438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档