如何在单击时展开ListView项目

时间:2016-03-26 15:39:22

标签: android listview expand

现在我有一个ListView,带有一个自定义ArrayAdapter来填充项目。现在,每个项目只显示一些信息,我希望能够点击一个项目,并让它“展开”,显示其余的信息。我想在扩展时有动画。我也想到达那里只有一个项目'扩展'一次(即如果一个是打开的,我点击另一个,第一个恢复正常)。即使它们被滚动到视图外,我也希望扩展项目保持扩展。

这是我现在的代码

single_row.xml

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

        android:text="FIRST INFO"
        android:id="@+id/first"/>


    <Space
        android:layout_width="match_parent"
        android:layout_height="15dp"
        android:id="@+id/space"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:text="SECOND INFO"
        android:id="@+id/hidden"/>

</RelativeLayout>

my_cards.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"
              android:background="#191919"

              android:id="@+id/card_layout"
              android:weightSum="1">


    <Space
        android:layout_width="match_parent"
        android:layout_height="29dp"
        android:layout_gravity="center_horizontal"/>

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:overScrollMode="never"
        android:id="@+id/list_view"

        android:divider="#191919"
        android:layout_marginRight="23dp"
        android:layout_marginLeft="23dp"
        android:dividerHeight="12dp"
        android:layout_gravity="center_horizontal"/>
</LinearLayout>

MyCards.java

public class MyCards extends android.support.v4.app.Fragment{

    private ListView mListView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        //Inflate the view
        View view = inflater.inflate(R.layout.my_cards, container, false);

        //Arrays for test information
        String[] names = {"Tim", "Kevin", "Bob", "John","Evan", "Roy", "Tristan", "Ronald"};
        String[] company = {"Apple", "Microsoft", "China", "Xiaomi","Facebook", "Unemployed", "CCP", "Government"};

        //Get reference to the listview
        mListView = (ListView) view.findViewById( R.id.list_view );

        //Initialize the adapter, and set it to the listview
        customAdapter adapter = new customAdapter(getContext(),names,company);
        mListView.setAdapter(adapter);

        return view;
    }
}
class customAdapter extends ArrayAdapter<String>{
    Context mContext;
    String[] mName;
    String[] mCompany;

    customAdapter(Context c, String[] names, String[] companies){
        super(c, R.layout.single_row, R.id.name, names);
        this.mContext = c;
        this.mName = names;
        this.mCompany = companies;
    }



    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View mRow = inflater.inflate(R.layout.single_row, parent, false);

        TextView mNameText = (TextView) mRow.findViewById(R.id.name);
        TextView mCompanyText = (TextView) mRow.findViewById(R.id.company);

        mNameText.setText(mName[position]);
        mCompanyText.setText(mCompany[position]);

        mRow.setBackgroundResource(R.drawable.custom_listview_shape);



        return mRow;
    }
}

现在,我试图让这个工作起来。我尝试将其添加到我的onCreateView方法

  mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                TextView hidden = (TextView) view.findViewById(R.id.hidden);


                if ( hidden.getVisibility() == View.GONE)
                {
                    //expandedChildList.set(arg2, true);
                    hidden.setVisibility(View.VISIBLE);
                }
                else
                {
                    //expandedChildList.set(arg2, false);
                    hidden.setVisibility(View.GONE);
                }
            }
        });

现在,虽然这在技术上做了我想做的事情(导致项目在点击时扩展),但它并没有按照我想要的方式进行。没有动画,可以一次扩展多个项目,一旦滚动到视图之外它就会恢复正常。

对此的任何帮助将不胜感激。

0 个答案:

没有答案