Android ListView不显示动画触摸?

时间:2015-11-09 20:17:19

标签: java android listview

当我按下列表中的项目时,我曾经使用过的每个列表视图都会自动提供动画更改功能。即它会变暗并沉入一点点。但是,我目前正在进行的工作方式不同。我想知道是否有人能告诉我原因。

import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends ListActivity {

    private MenuAdapter mAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mAdapter = new MenuAdapter();
        for (int i = 1; i < 50; i++) {
            mAdapter.addItem("Food Item " + i);
            if (i % 4 == 0) {
                mAdapter.addSeparatorItem("Category " + i);
            }
        }
        setListAdapter(mAdapter);
    }

    private class MenuAdapter extends BaseAdapter {

        private static final int TYPE_ITEM = 0;
        private static final int TYPE_SEPARATOR = 1;
        private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1;

        private ArrayList<String> mData = new ArrayList<String>();
        private LayoutInflater mInflater;

        private ArrayList<Integer> mSeparatorsSet = new ArrayList<Integer>();

        public MenuAdapter() {
            mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        public void addItem(final String item) {
            mData.add(item);
            notifyDataSetChanged();
        }

        public void addSeparatorItem(final String item) {
            mData.add(item);
            // save separator position
            mSeparatorsSet.add(mData.size() - 1);
            notifyDataSetChanged();
        }

        @Override
        public int getItemViewType(int position) {
            return mSeparatorsSet.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;
        }

        @Override
        public int getViewTypeCount() {
            return TYPE_MAX_COUNT;
        }

        public int getCount() {
            return mData.size();
        }

        public String getItem(int position) {
            return mData.get(position);
        }

        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            int type = getItemViewType(position);
            if (convertView == null) {
                holder = new ViewHolder();
                switch (type) {
                    case TYPE_ITEM:
                        convertView = mInflater.inflate(R.layout.item1, null);
                        convertView.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                Toast.makeText(getApplicationContext(),
                                        "Click", Toast.LENGTH_LONG).show();
                            }
                        });
                        holder.textView = (TextView)convertView.findViewById(R.id.text);
                        break;
                    case TYPE_SEPARATOR:
                        convertView = mInflater.inflate(R.layout.item2, null);
                        holder.textView = (TextView)convertView.findViewById(R.id.textSeparator);
                        break;
                }
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder)convertView.getTag();
            }
            holder.textView.setText(mData.get(position));
            return convertView;
        }

    }

    public static class ViewHolder {
        public TextView textView;
    }
}

2 个答案:

答案 0 :(得分:0)

所以,我决定从头开始重建我自己的解决方案。这比我见过的用标题创建列表视图的任何演示代码简单得多。当然,我将使用不同的布局而不是简单地改变颜色,但它仍然是一个有效的概念。

x

答案 1 :(得分:0)

根据您的确认,我们删除了ViewHolder模式。它工作正常。因为视图主题与正常的现有行为不同。

所以代码应该是这样的,

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

            LayoutInflater theInflater = LayoutInflater.from(getContext());
            View theView = theInflater.inflate(R.layout.row_layout, parent, false);

            MenuObject obj = getItem(position);

            if(obj.m_Type == MenuObject.ObjectType.Category_Header) {
                TextView theTextView = (TextView) theView.findViewById(R.id.textView1);
                theTextView.setText(obj.m_Name);
                theView.setBackgroundColor(Color.parseColor("#FFB51202"));
            }

            else {
                TextView theTextView = (TextView) theView.findViewById(R.id.textView1);
                theTextView.setText(obj.m_Name);
            }

            return theView;
        }