如果这里提到的任何内容与我是 android 开发的初学者无关,请原谅。
我已经经历了许多 SO 问题和网络上的许多示例,解释了所有相同的事情,但没有一个符合我的要求,因为我需要动态填充标题和列表项。
终于来到这里寻求一些好的建议。
我的行布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:orientation="horizontal"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="5dp" >
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_card"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/linearLayout3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TableLayout
android:id="@+id/tableLayout4"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TableRow
android:id="@+id/tableRow5"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/txtTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginStart="10dp"
android:layout_weight="1"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#000" />
<TextView
android:id="@+id/txtTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginStart="20dp"
android:layout_weight="1"
android:textColor="#000"
android:textSize="24sp" />
</TableRow>
<TableRow
android:id="@+id/tableRow6"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/txtCategory"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_marginStart="12dp"
android:layout_weight="1"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="#0000FF" />
</TableRow>
</TableLayout>
</LinearLayout>
<ImageView
android:id="@+id/btndelete"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_weight="1"
android:scaleType="fitEnd"
android:src="@drawable/ic_menu_delete" />
</LinearLayout>
</RelativeLayout>
这是我的 BaseAdapter:
class CustomAdapter extends BaseAdapter {
private static final int TYPE_ITEM = 0;
private static final int TYPE_SEPARATOR = 1;
private ArrayList<String> mData = new ArrayList<String>();
private TreeSet<Integer> sectionHeader = new TreeSet<Integer>();
private LayoutInflater mInflater;
public CustomAdapter(Context context) {
mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void addItem(final String title, String category,String time) {
mData.add(title);
mData.add(category);
mData.add(time);
notifyDataSetChanged();
}
public void addSectionHeaderItem(final String item) {
mData.add(item);
sectionHeader.add(mData.size() - 1);
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
return sectionHeader.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public String getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
int rowType = getItemViewType(position);
if (convertView == null) {
holder = new ViewHolder();
switch (rowType) {
case TYPE_ITEM:
//convertView = mInflater.inflate(R.layout.snippet_item1, null);
convertView = mInflater.inflate(R.layout.adapter_listview, parent, false);
holder.textView = (TextView) convertView.findViewById(R.id.txtTitle);
holder.txtCategory = (TextView) convertView.findViewById(R.id.txtCategory);
holder.txtTime = (TextView) convertView.findViewById(R.id.txtTime);
holder.btndelete = (ImageView) convertView.findViewById(R.id.btndelete);
break;
case TYPE_SEPARATOR:
//convertView = mInflater.inflate(R.layout.adapter_listview, null);
convertView = mInflater.inflate(R.layout.snippet_item1, parent, false);
holder.textView = (TextView) convertView.findViewById(R.id.text);
break;
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(mData.get(position));
return convertView;
}
public static class ViewHolder {
public TextView textView;
public TextView txtCategory;
public TextView txtTime;
public ImageView btndelete;
}
}
这是我的家庭片段:
public class HomeFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
private CustomAdapter mAdapter;
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
listViewData = (ListView)rootView.findViewById(R.id.listViewData);
return rootView;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivityResult called");
if((requestCode == 1)&&(resultCode == Activity.RESULT_OK)){
if(data!= null){
AddedTask=data.getStringExtra("NewTask");
CategoryName=data.getStringExtra("CategoryItem");
mAdapter.addSectionHeaderItem(CategoryName);
mAdapter.addItem(AddedTask);
mAdapter.addItem(TaskTime);
listViewData.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
}
}
}
}
结果输出为:
如您所见,我有一个包含所有视图的单行布局,但每个视图都在每一行中添加。
与此相关的代码在我的适配器中:
public void addItem(final String title, String category,String time) {
mData.add(title);
mData.add(category);
mData.add(time);
notifyDataSetChanged();
}
现在我有两个问题。
1.如何更改addItem()
以获得以下输出
2.如何在添加新的时候检查是否存在一个标题并将其余项目添加到该标题下方。
谁能建议我这样做的更好方法