0

我正在使用 MergeAdapter 显示带有节标题的列表。此列表显示正常,但有时 getView 方法中的某些内容有时不应该被触发。

这是触发的一点。

 @Override
public View getView(int position, View convertView, ViewGroup parent)
{
   ...
    try {
        JSONObject thisRow = items.get(position);
        ...
        View.OnClickListener myListener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getContext(), ID, Toast.LENGTH_SHORT).show();
            }
        };

        JSONObject alterations = thisRow.getJSONArray("alteration").getJSONObject(0);


        // This if statement gets trigger when it shouldn't
        if (!alterations.getString("text").equals("false")) {
            CharSequence currText = time.getText();
            time.setText(currText+" vs" +ID);
            Log.d("FUApp", "Alterations 'text' isn't false at "+ID);
            Button alter = (Button) centreView.findViewById(R.id.is_alt);
            String s = String.valueOf(position);
            alter.setText(s);
            RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
            alter.setLayoutParams(lp);
            alter.setOnClickListener(myListener);
        }
    ...
    return centreView;
}

我设置了一个标签来显示位置的值,这是我的应用程序的屏幕截图。

在此处输入图像描述

如您所见,按钮显示的位置是 43,按钮根本不应该显示在那里。

我完全不知道为什么会这样。谁能帮我解决这个问题?

编辑:当位置(例如 35)离开视图时,似乎是在进入屏幕的行上触发了 if 语句。仍然不确定如何阻止它出现。

4

1 回答 1

0

我删除了我的旧答案,因为它根本不好。给我带来了麻烦。

问题是当视图被回收时,我没有将按钮重置回 0dp

我添加了这些行

 Button alter = (Button) centreView.findViewById(R.id.is_alt);
        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 0);
        alter.setLayoutParams(lp);
        final JSONObject alterations = thisRow.getJSONArray("alteration").getJSONObject(0);
        if (!alterations.getString("text").equals("false")) {

它现在可以正常工作。

于 2013-09-04T14:08:19.600 回答