【问题标题】:Android Listview Button clickAndroid Listview 按钮点击
【发布时间】:2014-05-13 03:09:24
【问题描述】:

我有一个包含两个文本视图和一个按钮的列表视图。如果单击按钮,它将变为“停止”按钮图像,如果单击另一行的按钮,则上一个按钮将返回“播放”按钮图像,新行的按钮将变为“停止”按钮图像。所有这些都适用于前 2-3 行。向下滚动后,它停止工作并给我一个NullPointerException。我猜这与 listview 的视图组回收有关。如果有人可以在这里帮助我,那就太好了。

这是我的适配器的 onclicklistener 的代码:

    @Override
    public View getView(final int pos, View ConvertView, ViewGroup parent) {

        final MyViewHolder holder;
        if (ConvertView == null){
            ConvertView = layoutinflater.inflate(R.layout.row, parent, false);
            holder = new MyViewHolder();        
            holder.plays = (ImageButton) ConvertView.findViewById(R.id.plays);
            holder.plays.setFocusable(false);
            holder.plays.setOnClickListener(this);
            parents = parent;
            }else{
                holder = (MyViewHolder)ConvertView.getTag();
            }


            play = playdata.get(pos);
            holder.posturl= play.getposturl();






            holder.plays.setTag(pos);    
            ConvertView.setTag(holder);



            if(mHighlightedPositions[pos]) {
                holder.plays.setImageResource(R.drawable.ic_action_stop);
            }else {
                holder.plays.setImageResource(R.drawable.ic_action_play);
            }





        play = playdata.get(pos);
        holder.play = play;

        return ConvertView;



    }

    @Override
    public void onClick(View view) {

        int position = (Integer)view.getTag();
            Log.d("clicked", "Button row pos click: " + position);


            // Toggle background resource
            LinearLayout layout = (LinearLayout)view.getParent();
            ImageButton button = (ImageButton)layout.getChildAt(3);

            if(initialposition!=-1)
            {if(mHighlightedPositions[position]) {
                button.setImageResource(R.drawable.ic_action_play);
                mHighlightedPositions[position] = false;
            }else {
                button.setImageResource(R.drawable.ic_action_stop);
                mHighlightedPositions[position] = true;
                mHighlightedPositions[initialposition]=false;
                LinearLayout parentlayout = (LinearLayout) parents.getChildAt(initialposition);
                ImageButton btn = (ImageButton) parentlayout.getChildAt(3);
                btn.setImageResource(R.drawable.ic_action_play);

            }
            }else {
                button.setImageResource(R.drawable.ic_action_stop);
                mHighlightedPositions[position] = true;
            }
            initialposition = position;
    }

感谢任何帮助!谢谢!

编辑:我在这一点得到了 nullpointerexception:

LinearLayout parentlayout = (LinearLayout) parents.getChildAt(initialposition);
                    ImageButton btn = (ImageButton) parentlayout.getChildAt(3);
                    btn.setImageResource(R.drawable.ic_action_play);

此外,记录了 nullpointerexception,并且在滚动时父布局变为空。

【问题讨论】:

  • 什么是 mHihglightedPositions,它在哪里设置?

标签: java android android-layout button android-listview


【解决方案1】:

如果布局没有第三个孩子或没有布局,您应该捕获错误。试试看layout或button是否真的有你想要的内容:

LinearLayout layout = (LinearLayout)view.getParent();
if(layout != null) { 
    ImageButton button = (ImageButton)layout.getChildAt(3);
} else {
    Log.d("Error", "No Parent Layout");
}
if(button != null) {
    //do your stuff
} else {
    Log.d("Error", "No Third Child");
}

【讨论】:

    猜你喜欢
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    相关资源
    最近更新 更多