首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用try/catch声明和初始化最后一个变量

使用try/catch声明和初始化最后一个变量
EN

Stack Overflow用户
提问于 2016-01-18 15:40:04
回答 1查看 1.4K关注 0票数 3

我试图声明并初始化适配器中的最后一个变量,以便在OnLongClickListener()声明中使用该变量。问题是,变量是由可能引发失败异常的方法初始化的,因此初始化必须在try/catch的上下文中进行。在异常块中,有一个最后变量分配给它的回退值。这一切都发生在重写的getView()ArrayAdapter<T>中。

我的问题是,有没有一种巧妙的方法可以做到这一点?我只是在try/catch之外声明一个临时变量,并在try/catch中初始化它,然后在try/catch块之后声明并初始化最后一个变量,并使用临时变量的结果。这感觉太乱了。

This question is pretty closely related, but the solution presented seems extreme. Is it typical to wrap the entire contents of a method in a try/catch?

代码:

代码语言:javascript
复制
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) Data.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

//begin eww gross
        Vehicle temp;
        try {
            temp = Data.getVehicle(values.get(position).getId());
        } catch (ObjectNotFoundException e) {
            Log.e(TAG, e.getMessage() + "-- unable to find vehicle while getting list item vehicle for vehicles tab fragment");
            temp = values.get(position);
        }
        final Vehicle vehicle = temp;
//end disappointing, ugly workaround

        ViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.vehicle_item_with_img, null);
            holder = new ViewHolder();
            holder.vehicleLabel = (TextView) convertView.findViewById(R.id.vehicle_label);
            holder.statusImage = (ImageView) convertView.findViewById(R.id.lmImageView);
            holder.sImage = (ImageView) convertView.findViewById(R.id.sImageView);
            holder.vehicleTag = vehicle.getId();
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }


        if (Data.isFollowingVehicle(vehicle)) {
            holder.sImage.setVisibility(View.VISIBLE);
        }
        else {
            holder.sImage.setVisibility(View.INVISIBLE);
        }

        holder.statusImage.setImageDrawable(vehicle.getListIcon());
        holder.vehicleLabel.setText(vehicle.getFormattedLabel());

        final ViewHolder finalHolder = holder;
        convertView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                if (!vehicle.isFollowed()) {
                    finalHolder.sImage.setVisibility(View.VISIBLE);
                    mapInterface.follow(vehicle);
                } else {
                    finalHolder.sImage.setVisibility(View.GONE);
                    mapInterface.unfollow(vehicle);
                }
                return false;
            }
        });

        convertView.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                mapInterface.handleVehicleClickFromList(vehicle);
            }
        });

        return convertView;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-18 15:55:37

移动逻辑使车辆进入它自己的方法是很好的。它使它的可重用性和易读性。

代码语言:javascript
复制
private Vehicle getVehicle(int position) {
    try {
        return Data.getVehicle(values.get(position).getId());
    } catch (ObjectNotFoundException e) {
        Log.e(TAG, e.getMessage() + "-- unable to find vehicle while getting list item vehicle for vehicles tab fragment");
        return values.get(position);
    }
}

然后回到原来的方法:

代码语言:javascript
复制
final Vehicle vehicle = getVehicle(position);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34858579

复制
相关文章

相似问题

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