在我的片段中实现一个列表

时间:2014-11-13 04:22:24

标签: android android-layout android-fragments android-listview android-listfragment

所以我最近开始弄脏Android开发,经过一些摔跤并且没有得到这个工作我认为id由你们和gals运行。我希望你们中的任何一个人都解决了类似的问题

我有一个片段,其布局是显示文本视图和项目列表,如下所示:

Historical data
Item1    20
item2    30
item3    40

这包括操作栏上的一个按钮,该按钮将实现为允许用户添加更多项目和数字。我无法实现上述行为。我能够实现一个适配器,最终显示如下:

Historical data
    Item1    20
Historical data
    item2    30
Historical data
    item3    40

任何想法我怎么能做到这一点?

Myfragment.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="wrap_content"
    android:orientation="vertical" >

    <TextView
        style="?android:listSeparatorTextViewStyle"
        android:textSize="18sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/weight_history_label" />

    <RelativeLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"  >


        <TextView android:id="@+id/item"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:textStyle="bold"
            android:paddingLeft="4dp"
            android:paddingRight="4dp"
            android:text="Weigh in Date" />

        <TextView
            android:id="@+id/amount"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/item"

            android:inputType="numberDecimal"
            android:paddingLeft="4dp"
            android:paddingRight="4dp"
            android:paddingTop="4dp"
            android:text="Weight Amount " />

  </RelativeLayout>
</LinearLayout>

我有一类物品:

Items.java
public class NewEntry {
    private String mName;
    private int mNumber;

    public NewEntry(){
        ....

    }

getter / setter方法     }

然后在我的fragment.java

myFragment.java


public class MyFragment extends ListFragment {

    private ArrayList<Items> mEntries;
    MenuItem test;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //get all the entries and store them on mEntries
        mEntries = EntriesLab.get(getActivity()).getWeighInEntries();
        setHasOptionsMenu(true);

        ItemAdapter adapter = new ItemAdapter(mEntries);
        setListAdapter(adapter);
    }

    /interface to talk to activity
    public interface onButtonClicked {
        public void onWeighInButtonClicked(View v);
    }

    private class ItemAdapter extends ArrayAdapter<Items> {

        public ItemAdapter(ArrayList<Items> items) {
            super(getActivity(), 0, items);
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // If we weren't given a view, inflate one
            if (convertView == null) {
                convertView = getActivity().getLayoutInflater()
                    .inflate(R.layout.Myfragment, null);
            }
            Items c = getItem(position);
            TextView titleDateView =
                    (TextView)convertView.findViewById(R.id.name);
            titleDateView.setText(c.getDate().toString());
          //  Log.i("WeighInFragment: ", "###current Weight " + c.getDate().toString());
            TextView titleWeightView =
                    (TextView)convertView.findViewById(R.id.witem);


           titleWeightView.setText(""+c.getWeight());

            return convertView;

        }
    }
}

所以我想做的只是实现我的Label一次,然后显示项目列表!无论我尝试什么,我总是得到一个列表: 标签 项目价值 标签 项目价值 标签 项目价值 ...

3 个答案:

答案 0 :(得分:0)

您可以使用adapter.add方法将新项目添加到列表中,因为您已将列表设置为使用适配器:setListAdapter(adapter)

因此,您使用NewEntry创建setter的新实例,并在每次用户点击adapter.addbutton)时将其添加到onClick

最后,请致电adapter.notifyDataSetChanged更新您的列表数据。

答案 1 :(得分:0)

  

我想做的只是实现我的Label一次,然后显示项目列表!

为此,您需要将LABEL放在mainLayout

所以布局应该如下:

主要布局

<?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="match_parent"
    android:orientation="vertical" >

    <!-- Put Label here -->
    <TextView
        style="?android:listSeparatorTextViewStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/weight_history_label"
        android:textSize="18sp" />

    <!-- Your listview -->
    <ListView
        android:id="@+id/activity_main_menu_listview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:background="#ffffff"
        android:cacheColorHint="#00000000"
        android:divider="@android:color/transparent" >
    </ListView>

</LinearLayout>

列表行布局(list_row.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="wrap_content"
    android:orientation="vertical" >



        <TextView android:id="@+id/item"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:layout_weight=".5"
            android:paddingLeft="4dp"
            android:paddingRight="4dp"
            android:text="Weigh in Date" />

        <TextView
            android:id="@+id/amount"
            android:layout_width="wrap_content"
            android:layout_weight=".5"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"
            android:paddingLeft="4dp"
            android:paddingRight="4dp"
            android:paddingTop="4dp"
            android:text="Weight Amount " />

</LinearLayout>

然后您需要使用getView方法:

来扩充此布局
if (convertView == null) {
       convertView = getActivity().getLayoutInflater()
                    .inflate(R.layout.list_row, null);
}

答案 2 :(得分:0)

问题是您使用每个列表项的标签来扩充XML。这就是你每次获得标题的原因。在getView中膨胀的XML应该只适用于您的个别项目,而不是列表上方的标签。

尝试在片段中覆盖onCreateView而不是onCreate。在该函数中,您可以膨胀具有标签的XML文件,然后是ListView。然后为项目提供单独的XML,其中包含RelativeLayout和它的两个TextView子项。

编辑:

对不起,让我更完整。在onCreateView中,扩展完整片段的XML,其中应包含ListView。由于您使用的是ListActivity,因此请确保ListView的id是android:id / list。这应该看起来像

<?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="wrap_content"
    android:orientation="vertical" >

    <TextView
        style="?android:listSeparatorTextViewStyle"
        android:textSize="18sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/weight_history_label" />

    <ListView android:id="@id/android:list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#00FF00"
        android:layout_weight="1"
        android:drawSelectorOnTop="false"/>
</LinearLayout>

现在创建一个单独的list_item.xml,其中包含您的RelativeLayout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView android:id="@+id/item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:textStyle="bold"
        android:paddingLeft="4dp"
        android:paddingRight="4dp"
        android:text="Weigh in Date" />

    <TextView
        android:id="@+id/amount"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/item"

        android:inputType="numberDecimal"
        android:paddingLeft="4dp"
        android:paddingRight="4dp"
        android:paddingTop="4dp"
        android:text="Weight Amount " />

</RelativeLayout>

最后,您的onCreateView是将适配器附加到ListView的地方:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    //get all the entries and store them on mEntries
    mEntries = EntriesLab.get(getActivity()).getWeighInEntries();
    setHasOptionsMenu(true);

    View rootView = inflater.inflate(R.layout.my_fragment, container, true);
    setListAdapter(new ItemAdapter(mEntries));
    return rootView;
}