我在學習如何使用新的片段類,並且遇到了無法找到答案的情況。從活動更新片段中的適配器
我有一個監聽器的設置,以便當一個項目被點擊的列表片段中,該項目應該被反映在另一個片段的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延伸片段 { 私有靜態最後字符串標記=「BulkScanChosenAttributes」 ; private ArrayList項目; private GridAttributeAdapter適配器;
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(R.layout.bulk_scan_chosen)的XML佈局:
<?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(R.layout.grid_item_layout)視圖中的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="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有點搖搖欲墜。任何幫助將不勝感激。
嗨。便當盒!你能顯示你的活動代碼嗎?現在我有一些與我的GridView麻煩..或者也許在電子郵件/ Skype?可能嗎?我的googleProfile gplus.to/vsvydenko謝謝 – vsvydenko