我有一个列表项的布局,它由两个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,如果可能,我想切换可见性标记。
答案 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代码。
希望这个暗示有所帮助。