所以我最近开始弄脏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一次,然后显示项目列表!无论我尝试什么,我总是得到一个列表: 标签 项目价值 标签 项目价值 标签 项目价值 ...
答案 0 :(得分:0)
您可以使用adapter.add
方法将新项目添加到列表中,因为您已将列表设置为使用适配器:setListAdapter(adapter)
。
因此,您使用NewEntry
创建setter
的新实例,并在每次用户点击adapter.add
(button
)时将其添加到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>
<?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;
}