将 Textview 放在 List Fragment 之上 [英] Putting a Textview on top of a List Fragment

查看:26
本文介绍了将 Textview 放在 List Fragment 之上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在片段顶部添加文本视图.我使用以下适配器来填充列表片段,xml 文件是列表片段中的每一行.我需要在列表视图的顶部添加一个文本视图,该文本视图必须与列表一起滚动?

How Can I add a textview on top of a fragment. I'm using the following adapter to populate the listfragment and the xml file is each row in the list fragment. I need to add a textview ontop of listview which must be scrollable along with the list?

     public class Adapter extends BaseAdapter {
    Context context;

    public TextView txtName;
    public TextView txtTitle;


    private LayoutInflater mInflater;
    private Storage storage;
    FontManager fontManager;
    Typeface typeface;

    public Adapter(Context _context,Storage _storage) {
        context = _context;

        mInflater = LayoutInflater.from(context);
        this.storage = _storage;

        fontManager = new FontManager(_context);
        typeface = fontManager.getTypeFace();

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return _storage.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        convertView = mInflater.inflate(R.layout.row3, null);

        txtName = (TextView) convertView.findViewById(R.id.tvName);
        txtName.setTypeface(typeface);
        txtName.setText(storage.getName(position));

        txtTitle = (TextView) convertView.findViewById(R.id.tvTitle);
        txtTitle.setTypeface(typeface);
        txtTitle.setText(storage.getTitle(position));

        return convertView;
    }
}

xml:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:orientation="vertical"
    android:padding="20dp"
    android:scrollbars="none" 
    android:id="@+id/ll1">

    <TextView
        android:id="@+id/tvName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textColor="@android:color/black"
        android:textSize="20sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textColor="@android:color/black" />

</LinearLayout>

列表片段:

    public class SampleListFragment extends ListFragment {

    int number;

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        number = getArguments().getInt(
                "num", 0);
        new SampleAsyncTask(this, getActivity(), number).execute();
        return super.onCreateView(inflater, container, savedInstanceState);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub      
        }
    }
}

以下代码在 AsyncTask 类中用于填充列表片段

Following code is used in AsyncTask class to populate the list fragment

Adapter adapter = new Adapter(context, storage);
listFragment.setListAdapter(adapter);

推荐答案

您可以按照以下操作或将 textview 作为标题添加到您的列表中

You can do as below or add a textview as a header to your listivew

引用文档

ListActivity(ListFragment 类似)有一个默认布局,它由屏幕中央的单个全屏列表组成.但是,如果您愿意,您可以通过在 onCreate() 中使用 setContentView() 设置您自己的视图布局来自定义屏幕布局.为此,您自己的视图必须包含一个 ListView` 对象,其 ID 为 "@android:id/list"(如果在代码中,则为列表)

ListActivity(ListFragment is similar) has a default layout that consists of a single, full-screen list in the center of the screen. However, if you desire, you can customize the screen layout by setting your own view layout with setContentView() in onCreate(). To do this, your own view MUST contain aListView` object with the id "@android:id/list" (or list if it's in code)

activity_main.xml

activity_main.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

     <fragment android:name="com.example.listfragment.MyFragment"
            android:id="@+id/frag"
            android:layout_above="@+id/button1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />


</RelativeLayout>

MyFragment.java

MyFragment.java

public class MyFragment extends ListFragment {

    String names[] ={"A","B","C"};
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
    }
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
       Bundle savedInstanceState) {
      View myFragmentView = inflater.inflate(R.layout.list_frag, container, false);
      TextView tv = (TextView) myFragmentView.findViewById(R.id.textView1);
      tv.setText("My Header");
      setListAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,names));
      return myFragmentView;
     }
     @Override
     public void onListItemClick(ListView l, View v, int position, long id) {
         // on click display the item in toast
          Toast.makeText(getActivity(), (String)l.getItemAtPosition(position), Toast.LENGTH_SHORT).show();
         }
}

list_frag.xml

list_frag.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:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text="TextView" />

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:layout_centerHorizontal="true" >

    </ListView>

</RelativeLayout>

抓拍

如果你想让 textview 滚动

if you want the textview to scroll

<?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:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="19dp"
        android:text="TextView" />

</RelativeLayout>

在调用 setListAdapter 之前

Before calling setListAdapter

  View view = inflater.inflate(R.layout.text, null);
  TextView textinlfated = (TextView) view.findViewById(R.id.textView1);
  ListView lv = getListView();
  textinlfated.setText("TextView scrolls");
  lv.addHeaderView(view);

这篇关于将 Textview 放在 List Fragment 之上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆