我正在学习如何使用新的Fragment类,并遇到了无法找到答案的情况。
我有一个监听器设置,以便在列表片段中单击一个项目时,该项目应该反映在另一个片段的GridView中。
以下是听众:
public void onBulkScanAttributesFragmentListItemClicked(View v)
{
TextView nameID = (TextView) v.findViewById(R.id.list_item_with_checkbox_dialog_item_name);
String name = (String) nameID.getText();
String value = "Set value";
if (!names.contains(name))
{
names.add(name);
items.add(new Row(name, value));
}
for (Row row : items)
{
Log.d(TAG, row.getRowName());
Log.d(TAG, row.getRowValue());
}
BulkScanChosenAttributes chosen = new BulkScanChosenAttributes(items);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.chosen_att_fragment, chosen);
transaction.commit();
}
以下是使用GridView的片段中的构造函数和onActivityCreate以及onCreateView方法: 公共类BulkScanChosenAttributes扩展Fragment { private static final String TAG =“BulkScanChosenAttributes”; private ArrayList项; private GridAttributeAdapter adapter;
public BulkScanChosenAttributes()
{
items = null;
}
public BulkScanChosenAttributes(ArrayList<Row> items)
{
this.items = items;
}
@Override
public void onActivityCreated(Bundle savedInstance)
{
super.onActivityCreated(savedInstance);
adapter = new GridAttributeAdapter(getActivity(), items);
if (items != null)
{
LayoutInflater gridInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = gridInflater.inflate(R.layout.bulk_scan_chosen, null);
GridView gridView = (GridView) v.findViewById(R.id.gridview);
gridView.setAdapter(adapter);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
if (adapter != null)
adapter.notifyDataSetChanged();
return inflater.inflate(R.layout.bulk_scan_chosen, container, false);
}
以下是GridView的XML布局(R.layout.bulk_scan_chosen):
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center" />
GridView中视图的XML布局(R.layout.grid_item_layout):
<?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">
<TextView
android:id="@+id/grid_att_name"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:textColor = "@color/black"
android:textSize = "@dimen/font_large"
android:textStyle = "bold"
android:gravity = "center_horizontal" />
<TextView
android:id="@+id/grid_att_value"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:textColor = "@color/black"
android:textSize = "@dimen/font_large"
android:textStyle = "bold"
android:gravity = "center_horizontal" />
</LinearLayout>
(这已经很久了!)最后,我的适配器:
public class GridAttributeAdapter extends BaseAdapter
{
private int count;
private LayoutInflater inflater;
private Context context;
private String name;
private String value;
private ArrayList<Row> items;
public GridAttributeAdapter(Context context, ArrayList<Row> items)
{
int count = 0;
this.context = context;
this.items = items;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount()
{
return count;
}
@Override
public Object getItem(int position)
{
return position;
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
//try to inflate the view
try
{
v = inflater.inflate(R.layout.grid_item_layout, null);
}
catch (NullPointerException npe)
{
npe.printStackTrace();
Log.e(TAG, "view is null");
}
Row row = items.get(position);
try
{
TextView name = (TextView) v.findViewById(R.id.grid_att_name);
TextView value = (TextView) v.findViewById(R.id.grid_att_value);
if (ListMetaData.withDates.contains(ListMetaData.reverseScreenNames.get(row.getRowName())))
{
try
{
Date date = new Date(new Long(row.getRowValue()));
value.setText(date.getMonth() + "/" + date.getDate() + "/" + date.getYear());
}
catch (NumberFormatException nfe)
{
value.setText(row.getRowValue());
}
}
else
{
value.setText(row.getRowValue());
}
name.setText(row.getRowName());
}
catch (NullPointerException npe)
{
npe.printStackTrace();
Log.e(TAG, "something went wrong in TextView assignment");
}
return v;
}
}
适配器在BulkScanChosenAttributes中声明。
我想要更新的BulkScanChosenAttributes片段是空白的。我已经检查过以确保代码正在执行,但我对Fragments仍然有些不稳定。任何帮助将不胜感激。
答案 0 :(得分:0)
问题出在我的BaseAdapter实现中。 getCount方法返回0.修复后,它按预期工作。