首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ListView在从另一个活动返回时更改顺序

ListView在从另一个活动返回时更改顺序
EN

Stack Overflow用户
提问于 2012-03-10 04:16:22
回答 1查看 186关注 0票数 1

我有一个自定义的ListView,前四个元素是按钮。当我单击一个按钮时,它将进入一个新的活动,我在新的活动中执行任何操作,然后返回。当我返回时,我希望我点击的按钮被选中,然而有时(并且只是有时候)它选中了错误的框,而我不知道为什么。下面是我的自定义适配器的代码:

代码语言:javascript
复制
private class MyCustomAdapter extends BaseAdapter {
    private static final int TYPE_BUTTON = 0;
    private static final int TYPE_INFO = 1;
    private static final int TYPE_PICTURE = 2;
    private static final int TYPE_MAX_COUNT = 3;
    private int totalCount = 0;
    private ArrayList<String> mData = new ArrayList<String>();
    private LayoutInflater mInflater;

    public MyCustomAdapter() {
        mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public void addButton(final Button btn) {
        mButtons.add(btn);
        totalCount = totalCount + 1;
        notifyDataSetChanged();
    }

    public void addInfo(final String info) {
        mInfo.add(info);
        totalCount = totalCount + 1;
        notifyDataSetChanged();
    }

    public void addPicture(final Bitmap pic) {
        mPictures.add(pic);
        totalCount = totalCount + 1;
        notifyDataSetChanged();
    }

    public void addItem(final String item) {
        mData.add(item);
        totalCount = totalCount + 1;
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return totalCount;
    }

    @Override
    public String getItem(int position) {
        return "TEST 5000";
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemViewType(int position) {
        if (position <= 3) {
            return TYPE_BUTTON;
        }
        if (mInfo.size() + 3 >= position) {
            return TYPE_INFO;
        } else {
            return TYPE_PICTURE;
        }
    }

    @Override
    public int getViewTypeCount() {
        return TYPE_MAX_COUNT;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        System.out.println("getView " + position + " " + convertView);
        ViewHolder holder = null;
        int type = getItemViewType(position);
        if (convertView == null) {
            holder = new ViewHolder();
            switch (type) {
                case TYPE_BUTTON:
                    convertView = mInflater.inflate(R.layout.button, null);
                    holder.btn = (Button)convertView.findViewById(R.id.btn);
                    holder.btn.setText(mButtons.get(position).getText().toString());
                    holder.btn.setLayoutParams(new LinearLayout.LayoutParams(mButtons.get(position).getLayoutParams().width, mButtons.get(position).getLayoutParams().height));
                    break;
                case TYPE_INFO:
                    convertView = mInflater.inflate(R.layout.incident_summary_items, null);
                    holder.textView = (TextView)convertView.findViewById(R.id.text);
                    holder.textView.setText(mInfo.get(position-4));
                    break;
                case TYPE_PICTURE:
                    convertView = mInflater.inflate(R.layout.image, null);
                    holder.imageView = (ImageView)convertView.findViewById(R.id.pic);
                    holder.imageView.setImageBitmap(mPictures.get(position-4-mInfo.size()));
            }
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder)convertView.getTag();
            switch(type) {
                case TYPE_BUTTON:
                    holder.btn.setText(mButtons.get(position).getText().toString());
                    holder.btn.setLayoutParams(new LinearLayout.LayoutParams(mButtons.get(position).getLayoutParams().width, mButtons.get(position).getLayoutParams().height));
                    break;
                case TYPE_INFO:
                    holder.textView.setText(mInfo.get(position-4));
                    break;
                case TYPE_PICTURE:
                    holder.imageView.setImageBitmap(mPictures.get(position-4-mInfo.size()));
                    break;
            }
        }
        return convertView;
    }

}

public static class ViewHolder {
    public TextView textView;
    public ImageView imageView;
    public Button btn;
}

下面是我设置复选框并调用新活动的代码:

代码语言:javascript
复制
public void myClickHandler(View v)
{
    //get the row the clicked button is in
    vwParentRow = (LinearLayout)v.getParent();

    btnChild = (Button)vwParentRow.getChildAt(0);


    if (btnChild.getText().toString().equals("Take Information")) {
        btnChild.setCompoundDrawablesWithIntrinsicBounds(null,null,mCheckMark,null);
        Intent intent = new Intent(this, Info.class);
        startActivityForResult(intent, 1);
    }

    if (btnChild.getText().toString().equals("Take Pictures")) {
        btnChild.setCompoundDrawablesWithIntrinsicBounds(null,null,mCheckMark,null);
        Intent intent = new Intent(this, Pictures.class);
        startActivityForResult(intent, 2);
    }
}

我发现如果我把这些台词注释掉

代码语言:javascript
复制
holder.btn.setText(mButtons.get(position).getText().toString());
holder.btn.setLayoutParams(new LinearLayout.LayoutParams(mButtons.get(position).getLayoutParams().width, mButtons.get(position).getLayoutParams().height));

在我的自定义list Adapter的else语句中,checklist检查了正确的按钮,但这些按钮将改变列表中的顺序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-15 19:21:38

当您为新活动使用startActivityForResult时,您可以从该活动和您的按钮所在的父级上返回值,使用onResume将按钮状态设置为disabled。

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

https://stackoverflow.com/questions/9640395

复制
相关文章

相似问题

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