Android:在两列中显示信息,而不是 BaseAdapter 的一列

Posted

技术标签:

【中文标题】Android:在两列中显示信息,而不是 BaseAdapter 的一列【英文标题】:Android : Displaying information in two columns instead of one for BaseAdapter 【发布时间】:2016-01-09 20:48:15 【问题描述】:

我正在开发一个 android 应用程序,其中我有一个 java.util.List of Note 对象,我通过扩展 BaseAdapter 将其显示在一个页面上。我在屏幕上有尺寸可以并排显示其中的 2 个。

我不知道如何使用 BaseAdapter 来完成这项任务。你能帮忙的话,我会很高兴。非常感谢。 :-) 如下图所示,我有空间可以再显示一列并且可以点击(它们现在就是,以获取它们的 ID):

GroupSectionActivity : // 笔记检索 :

public class GroupSectionActivity extends DrawerLoader 

 @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sectionlayout);
 final ArrayList<HashMap<String, String>> restSectionArrayList = new ArrayList<HashMap<String, String>>();
        for (RestNote restNote : restNoteListFinal) 
            HashMap<String, String> sectionDisplay = new HashMap<>();
            sectionDisplay.put(noteId, String.valueOf(restNote.getMnoticesid()));
            sectionDisplay.put(noteTag, restNote.getMnotetag());
            sectionDisplay.put(noteText,restNote.getMnotetext());
            sectionDisplay.put(noteColor,restNote.getMnotecolor());
            restSectionArrayList.add(sectionDisplay);
        

        listView = (ListView) findViewById(R.id.seclist);

       SectionLazyAdapter sectionLazyAdapter = new SectionLazyAdapter(this, restSectionArrayList);

        listView.setAdapter(sectionLazyAdapter);

SectionLazyAdapter:

public class SectionLazyAdapter extends BaseAdapter

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater=null;

    public SectionLazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) 
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    

    public int getCount() 
        return data.size();
    

    public Object getItem(int position) 
        return position;
    

    public long getItemId(int position) 
        return position;
    

    public View getView(int position, View convertView, ViewGroup parent) 
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.activity_group_section, null);

        TextView noteTag = (TextView)vi.findViewById(R.id.noteTag);
        TextView noteText = (TextView) vi.findViewById(R.id.noteText);
        ImageView noteImage = (ImageView)vi.findViewById(R.id.noteImage);
        HashMap<String, String> sectionList = new HashMap<>();
        sectionList = data.get(position);
        noteTag.setText(sectionList.get(GroupSectionActivity.noteTag));
        noteText.setText(sectionList.get(GroupSectionActivity.noteText));
        String noteColorFromList = sectionList.get(GroupSectionActivity.noteColor);
        if(noteColorFromList.equals("#1abc9c"))
            noteImage.setImageResource(R.drawable.notegreen);
        
        if(noteColorFromList.equals("#3498db"))
            noteImage.setImageResource(R.drawable.noteblue);
        
// And other if conditions
return vi;
   

sectionLayout.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_
    android:layout_>

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_
        android:layout_
        android:orientation="horizontal">

        <ListView
            android:id="@+id/seclist"
            android:layout_
            android:layout_
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/sectionAddButton" />

        <Button
            android:layout_
            android:layout_
            android:text="Add Section"
            android:id="@+id/sectionAddButton"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />

        <EditText
            android:layout_
            android:layout_
            android:id="@+id/sectionNameTextField"
            android:layout_above="@+id/seclist"
            android:layout_toRightOf="@+id/sectionAddButton"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true" />

    </RelativeLayout>

    <ListView
        android:id="@+id/list_slidermenu"
        android:layout_
        android:layout_
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:dividerHeight="1dp" />
</android.support.v4.widget.DrawerLayout>

activity_groupSection.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="horizontal"
    android:padding="5dip" >

    <FrameLayout
        android:layout_
        android:layout_
        android:paddingLeft="15dp"
        android:orientation="vertical">
        <ImageView
            android:id="@+id/noteImage"
            android:layout_
            android:layout_
            android:scaleType="fitXY"
            android:padding="5dp"/>

        <TextView
            android:id="@+id/noteTag"
            android:layout_
            android:layout_
            android:visibility="visible"
            android:gravity="center"
            android:layout_gravity="center_horizontal|top"
            android:maxLines="1"
            android:ellipsize="end"
            android:scrollHorizontally="true"
            android:layout_marginTop="10dp" />

        <TextView
            android:layout_
            android:layout_
            android:id="@+id/noteText"
            android:layout_gravity="center_horizontal|bottom"
            android:layout_marginBottom="10dp"
            android:layout_marginTop="30dp" />
    </FrameLayout>
</RelativeLayout>

【问题讨论】:

如何使用GridView 而不是ListView 并将numColumns 设置为2 只使用recyclerview 可以更好developer.android.com/reference/android/support/v7/widget/… 提供所有类型,如网格、交错和列表 @SatyenUdeshi :您能告诉我如何修改此代码以使用 GridView 吗? @Pavan :我不知道 recycler-view 怎么样。你能告诉我我应该在这段代码中修改什么来使用 RecyclerView。 在您的 xml 文件中将 ListView 替换为 GridView 并将 android:numColumns 设置为 2 并在 java 文件中将 ListView 替换为 GridView 【参考方案1】:

为了实现两列,您可以使用GridView 而不是ListView,并在xml 文件中将列数设置为2

是的,也可以在您的 java 文件中替换相同的内容,并将您的 adapter 设置为 GridView,然后您就完成了。

【讨论】:

有空的时候请检查问题。谢谢。 :-) 你好@borg 对不起,我没有得到关于字体真棒的问题,你能解释一下吗/\ 当然。 Font-awesome 是一种看起来更像图片的字体集。简单的 2d 图像(保存为字体),如心脏、鸡蛋等。因此,如果您保存字符串“egg”,则会有一个 2d 图像(字体)与之关联。所以,对于我的应用程序,我已经保存了它们并在 Android 中检索它。我只想知道如何显示那些字体很棒的字体。这是一个非常流行的库,你可能会找到Android的参考资料,我不太了解它,所以没有意义。 您可以在这里查看github.com/aasdkl/font-awsome-for-android 并阅读如何部分 我会看看,如果有任何问题,我会在这里发表评论。非常感谢。 :-)

以上是关于Android:在两列中显示信息,而不是 BaseAdapter 的一列的主要内容,如果未能解决你的问题,请参考以下文章

ionic 2 angular 2 在两列中分布绑定记录

ipywidgets:如何在两列中组织滑块

如何使用 python 在两列中扩展具有日期范围的数据框?

如何同时在两列中添加或插入多行? [复制]

Pandas - 在两列中查找具有匹配值的行并在另一列中相乘

如何使用反应在两列或多列中显示地图的结果