【问题标题】:How to use library project in Android Studio?如何在 Android Studio 中使用库项目?
【发布时间】:2014-12-16 01:28:04
【问题描述】:

我很想使用此模块或其他模块来使列表视图上的部分标题保持在顶部。

http://applidium.github.io/HeaderListView/

现在在它的自述文件中说

1. Import the project in Eclipse then add it to the build path of your project.
2. Replace your ListView with HeaderListView
3. Implement a subclass of SectionAdapter
4. Set it to your HeaderListView with setAdapter(SectionAdapter adapter)

现在我要将整个项目文件导入 Android Studio 以使其正常工作吗?我需要在我的 gradle 文件中添加任何内容吗?

我会做 File > Import Project 还是 Import Module?

或者如何从github添加和使用这个项目

https://github.com/vinc3m1/android-segmentedradiobutton

感谢您的帮助:)

编辑

我现在需要帮助设置 HeaderView 与我的列表视图和数据,他是我目前的 ListView 与不粘的标题。我希望它设置好让它们粘住。

这是我的数据,其中键是节标题,值是单元格。

linkedHashMap = {Pizza=[Cheese Pizza - Slice, Pepperoni Pizza, Tomato Bruschetta Flatbread Pizza, Herb 
               Seasoned Breadsticks, Spaghetti Sauce with Tomato Bits], 
       Salad=[Salad Bar Station, Green Pepper & Tomato Salad, Lo Mein Noodle Salad],
       Cold Cereal=[Miscellaneous/Peripherals]
       Dessert=[Carnival Cookies, Sweet Cinnamon Brownies, Oreo Crumble Pudding Cup, 
                 Cherry Jell-O Parfait]}

这是我的设置。

MyCustomAdapter mAdapter = new MyCustomAdapter();
    for (int i = 0; i < linkedHashMap.size(); i++) {
        Object[] headerArray = linkedHashMap.keySet().toArray();
        String headerString = headerArray[i].toString();
        mAdapter.addSeparatorItem(headerString);
        for (int i2 = 0; i2 < linkedHashMap.get(headerString).size(); i2++) {
            mAdapter.addItem(linkedHashMap.get(headerString).get(i2));
        }
    }

这是我的适配器

public class MyCustomAdapter extends BaseAdapter{
    ArrayList mData = new ArrayList();
    LayoutInflater mLayoutInflater;

    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 TreeSet mSeparatorsSet = new TreeSet();

    public MyCustomAdapter() {
        mLayoutInflater = (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;
    }

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

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

    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder = null;
        int type = getItemViewType(position);
        System.out.println("getView " + position + " " + convertView + " type = " + type);
        if (convertView == null) {
            holder = new ViewHolder();
            switch (type) {
                case TYPE_ITEM:
                    convertView = mLayoutInflater.inflate(R.layout.item_cell_view, parent, false);
                    holder.textView = (TextView)convertView.findViewById(R.id.text);
                    break;
                case TYPE_SEPARATOR:
                    Context context = DiningItemsActivity.this;
                    convertView = mLayoutInflater.inflate(R.layout.header_cell_view, parent, false);
                    holder.textView = (TextView)convertView.findViewById(R.id.textSeparator);
                    convertView.setBackgroundColor(colorBar);
                    break;
            }
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder)convertView.getTag();
        }
        holder.textView.setText(mData.get(position).toString());
        return convertView;
    }

    public class ViewHolder {
        public TextView textView;
    }


}

【问题讨论】:

  • 也许,你可以先在Eclipse中创建一个项目,然后在Android Studio中导入。

标签: android listview module android-studio


【解决方案1】:

该库有一个演示,我建议您看一下,这是您在代码中所做的所有事情,但方式很好,例如,该库已将获取标题视图和行视图或行视图数分开或标题视图。我认为方法名称是不言自明的,所以请尝试一下:

public class MainActivity extends Activity {

    HeaderListView mHeaderListView;
    LinkedHashMap<String, String[]> mLinkedHashMap;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);  

        mHeaderListView = (HeaderListView)findViewById(R.id.HeaderListView_MainActivity);
        mLinkedHashMap = new LinkedHashMap<>();
        mLinkedHashMap.put("Pizza", new String[]{"Cheese Pizza - Slice","Pepperoni Pizza","Tomato Bruschetta Flatbread Pizza",
                "Herb Seasoned Breadsticks","Spaghetti Sauce with Tomato Bits"});

        mLinkedHashMap.put("Salad", new String[]{"Salad Bar","Green Pepper & Tomato Salad","Lo Mein Noodle Salad"});

        mLinkedHashMap.put("Cold Cereal", new String[]{"Miscellaneous/Peripherals"});

        mLinkedHashMap.put("Dessert", new String[]{"Carnival Cookies","Sweet Cinnamon Brownies","Oreo Crumble Pudding Cup", 
        "Cherry Jell-O Parfait"});


        mHeaderListView.setAdapter(new SectionAdapter() {


            @Override
            public int numberOfSections() {

                return mLinkedHashMap.keySet().toArray().length;
            }

            @Override
            public int numberOfRows(int section) {

                if(section >=0){
                    String sectionKey = (String)mLinkedHashMap.keySet().toArray()[section];
                    int numOfRows = mLinkedHashMap.get(sectionKey).length;
                    return numOfRows;
                }else{
                    return 0;
                }
            }

            @Override
            public boolean hasSectionHeaderView(int section) {
                return true;
            }

            @Override
            public View getRowView(int section, int row, View convertView,
                    ViewGroup parent) {

                ViewHolder holder = null;
                if (convertView == null) {
                    holder = new ViewHolder();
                    LayoutInflater mLayoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
                    convertView = mLayoutInflater.inflate(R.layout.item_cell_view, parent, false);
                    holder.textView = (TextView)convertView.findViewById(R.id.text);
                    convertView.setTag(holder);
                } else {
                    holder = (ViewHolder)convertView.getTag();
                }
                String sectionKey = (String)mLinkedHashMap.keySet().toArray()[section];
                holder.textView.setText(mLinkedHashMap.get(sectionKey)[row]);
                return convertView;

            }

            @Override
            public Object getRowItem(int section, int row) {

                return ((String[])mLinkedHashMap.keySet().toArray()[section])[row];
            }

            @Override
            public View getSectionHeaderView(int section, View convertView,
                    ViewGroup parent) {
                ViewHolder holder = null;
                LayoutInflater mLayoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
                if (convertView == null) {
                    holder = new ViewHolder();          
                    convertView = mLayoutInflater.inflate(R.layout.header_cell_view, parent, false);
                    holder.textView = (TextView)convertView.findViewById(R.id.textSeparator);
                    convertView.setBackgroundColor(Color.parseColor("#FF0000"));


                    convertView.setTag(holder);
                } else {
                    holder = (ViewHolder)convertView.getTag();
                }
                holder.textView.setText((String)(mLinkedHashMap.keySet().toArray()[section]));

                return convertView;
            }
        });


    }

    public static class ViewHolder {
        public TextView textView;
    }

}

item_cell_view.xml

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

    <TextView 
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:textSize="12sp"  
        />


</LinearLayout>

header_cell_view.xml

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

    <TextView 
        android:id="@+id/textSeparator"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:textSize="12sp"  
        />


</LinearLayout>

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
 <com.example.your package name of HeaderListView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/HeaderListView_MainActivity"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#eff4ee"
        android:divider="#000000"
        android:dividerHeight="2dp"
        android:padding="8dp" />

【讨论】:

  • 对,所以在这个例子中,这一切都是在onCreate 中完成的,但是我从网络上获取数据并在MyCustomAdapter 中进行了很多这样的设置,我可以把这个代码在里面?
  • 您可以创建一个扩展SectionAdapter 的适配器,并使用接收mLinkedHashMap 的构造函数,然后在您的数据准备好时创建适配器并传递mLinkedHashMap 并将其设置为mHeaderListView,这只是一个示例,我想向您展示如何使用该库处理您的数据。
  • 我收到编译错误error: package com.applidium.headerlistview does not exist ?和error: cannot find symbol class headerlistview
  • 我还没有将库完全添加到我的项目中,我只是添加了源代码,所以转到这个 Link 并下载这些文件,然后将这些文件添加到你的 mainactivity 的 src 文件夹中(同时更改这些文件的包名称以匹配您的主要活动的包名称)并将images添加到您的drawable文件夹中。
  • 嘿,我得到了标题视图在segmented radio button上的任何帮助
【解决方案2】:

对于HeaderListView,可以获取代码here,将HeaderListView文件夹导入为Module(import module)

对于第二个,只需克隆并导入项目。这是一个示例代码。

【讨论】:

  • 嘿,伙计,我已经导入了 HeaderListView 并正在尝试对其进行设置,您是否熟悉设置我将在此发布赏金以寻求您的帮助 :)
  • 嗨,我试过了,它有效。只需要运行HeaderListViewDemo,就可以看到一个快速的Demo,很不错
  • 关于设置,你可以在这里阅读:github.com/applidium/HeaderListView/blob/master/README.md
  • 你看过演示吗?需要设置什么样的代码,可以贴出来
猜你喜欢
  • 2013-12-21
  • 2014-09-25
  • 2015-01-31
  • 2016-11-06
  • 2013-05-11
  • 2016-04-23
  • 1970-01-01
  • 2013-05-12
相关资源
最近更新 更多