隐藏/取消隐藏列表项中的布局

时间:2014-01-14 10:41:25

标签: android layout view visibility

我有一个列表项的布局,它由两个LinearLayouts组成。我想要实现的是:当点击项目时,第二个LinearLayout应该变得可见/消失,具体取决于当前的可见性。

我正在尝试使用此代码:

    getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            view.getViewById(R.id.id_of_the_second_linear_layout).setVisibility(View.GONE);
        }
    });

但是,单击项目时,其他几个线性布局(在不同的项目中)将变为可见/隐藏。为什么呢?

更新

适配器:

public class ExpensesCursorAdapter extends SimpleCursorAdapter implements SimpleCursorAdapter.ViewBinder { 

public ExpensesCursorAdapter(Context context, Cursor cursor) {

        super(context, R.layout.single_expense, cursor,
            new String[]{
                ExpenseContract._AMOUNT,
                CategoryContract._NAME,
                ExpenseContract._DATE
            },
            new int[]{
                R.id.expense_amount,
                R.id.expense_category,
                R.id.expense_date
            },
            CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

        setViewBinder(this);
    }

    public View getView(int position, View convertView, ViewGroup viewGroup) {
        View v = super.getView(position, convertView, viewGroup);

        final View expandablePanel = v.findViewById(R.id.expandable_panel);
        expandablePanel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                expandablePanel.setVisibility(view.getVisibility() == View.GONE ? View.VISIBLE : View.GONE);
            }
        });
        return v;
    }

    @Override
    public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
        if (columnIndex == cursor.getColumnIndex(ExpenseContract._AMOUNT)) {
            return handleAmountView((TextView) view, cursor);
        }
        else ...

        return false;
    }

    private boolean handleAmountView(TextView view, Cursor cursor) {
        TextView textView = (TextView) view;

        Double amount = ExpenseDbHelper.getAmount(cursor);
        String formattedAmount = new DecimalFormat("##.00").format(amount);

        textView.setText(formattedAmount);

        return true;
    }
}

每个项目都已在XML中添加了LinearLayout,如果可能,我想切换可见性标记。

2 个答案:

答案 0 :(得分:0)

你在错误的地方写你的逻辑。您想要在listitem中收听视图的点击次数。在Adapter的getView方法中写下你的逻辑。在您的getView逻辑中可以像这样

ll1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                ll2.setVisibility(View.GONE);

            }
        });

ll2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                ll1.setVisibility(View.GONE);

            }
        });

像这样。

答案 1 :(得分:0)

当您滚动列表项时,某些布局会隐藏和取消隐藏,在这种情况下,如果您一次只能看到一个视图(即一次只考虑一个单元格),那么您可以保持点击项目的位置或ID,因为您使用的是cursorAdapter。否则,如果您正在考虑多个单元格,那么请保留一个列表,其中存储已被挖掘的单元格的每个ID。

将列表或单个位置值传递给adpater,并在getview中比较id或位置,然后执行visiblity代码。

希望这个暗示有所帮助。