2011-07-15 36 views
0

我在學習如何使用新的片段類,並且遇到了無法找到答案的情況。從活動更新片段中的適配器

我有一個監聽器的設置,以便當一個項目被點擊的列表片段中,該項目應該被反映在另一個片段的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有點搖搖欲墜。任何幫助將不勝感激。

回答

0

問題出在我的BaseAdapter實現中。 getCount方法返回0.修復後,它按預期工作。

+0

嗨。便當盒!你能顯示你的活動代碼嗎?現在我有一些與我的GridView麻煩..或者也許在電子郵件/ Skype?可能嗎?我的googleProfile gplus.to/vsvydenko謝謝 – vsvydenko

相關問題