android - 更改为与布局不同后如何单击 ListView 项目?

标签 android listview layout-inflater

当我点击 ListView 时,它会将该项目更改为不同的布局。但在那之后我不能再点击那个项目了。我应该做些什么?请帮我。谢谢。

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null || convertView.getTag() == null) {
        convertView = inflater.inflate(R.layout.activity_mainlist_item, parent, false);
        holder = new ViewHolder(convertView);
        convertView.setTag(holder);

    }else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.rl_item.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            selectedItem(position);
            notifyDataSetChanged();
            Intent intent = new Intent(mContext.getApplicationContext(), DetailActivity.class);
            mContext.startActivity(intent);
        }
    });

    if (this.clk_position == position) {
        View view = inflater.inflate(R.layout.activity_mainlist_item_p, null);
        return view;
    }
    return convertView;
}

最佳答案

我建议使用单一布局并将其分为两个部分。默认情况下,第一部分是可见的,第二部分是不可见的。单击列表项时,使第一部分不可见,第二部分可见。

例如,

list_item_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <!-- replace below TextView with the layout of activity_mainlist_item.xml -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="Layout 1"
        android:id="@+id/layout1"
        android:background="@android:color/holo_blue_bright"
        />

    <!-- replace below TextView with the layout activity_mainlist_item_p.xml and don't forget to set android:visibility="gone"  -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="Layout 2"
        android:id="@+id/layout2"
        android:visibility="gone"
        android:background="@android:color/holo_purple"
        />
</LinearLayout>

getView()中,尝试如下

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null || convertView.getTag() == null) {
        convertView = inflater.inflate(R.layout.list_item_layout, parent, false);
        holder = new ViewHolder(convertView);
        // Assuming `ViewHolder` has layout1 and layout2.
        holder.layout1 = (TextView) convertView.findViewById(R.id.layout1);
        holder.layout2 = (TextView) convertView.findViewById(R.id.layout2);
        convertView.setTag(holder);

    }else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.rl_item.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            selectedItem(position);
            notifyDataSetChanged();
            Intent intent = new Intent(mContext.getApplicationContext(), DetailActivity.class);
            mContext.startActivity(intent);
        }
    });

    if (this.clk_position == position) {
        // Here, set swap the visibility or vice versa depending on your conditions
        holder.layout1.setVisibility(View.GONE);
        holder.layout2.setVisibility(View.VISIBLE);
        return view;
    }
    return convertView;
}

关于android - 更改为与布局不同后如何单击 ListView 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36004377/

相关文章:

android - 膨胀类 android.support.v7.widget.CardView 时出错

java - Android 通过单击按钮删除动态创建的微调器和按钮

android - 以编程方式更改 ActionBar 图标

c# - ListView 项目在 winform 中选择

android - 如何从 JNI/NDK C++ 代码访问/res/raw?

用于大型数据集的 Android ListView

android - Recyclerview 和处理不同类型的行膨胀

android - 以编程方式设置 imageView 宽度时的空指针

android - 如何将按钮添加到自定义滚动和缩放 SurfaceView?

android - 如何区分互联网是wifi还是android中的移动数据?