2016-09-04 4 views
0

同じエラーで既存の投稿を見ましたが、コード/実装は私とは異なりますが、いくつかの投稿の提案は解決できませんでした。私は画像のクリック時にグリッド(画像のリスト)を表示するフラグメントを別のフラグメントに置き換えようとしています。実行時に「Java.lang.UnsupportedOperationException:addView(View)がAdapterViewでサポートされていません」というエラーが表示されますが、コードのどの部分がこのエラーの原因になっているか、この問題を解決するために何が必要かを確認できませんでした。これを解決するためにあなたの助けを感謝します。コードは以下の通りです:グリッドとUnsupportedOperationException:AdapterViewでaddView(View)がサポートされていません

フラグメント(画像の一覧):

public class OneFragment extends Fragment { 

public OneFragment() { 
    // Required empty public constructor 
} 

private ListView mListView; 
GridView grid; 
String[] web = {"Doctors","Dentists","Test" }; 
int[] imageId = {R.mipmap.doctors,R.mipmap.dentists,R.mipmap.ic_launcher}; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_one, container, false); 
    int iconSize=getResources().getDimensionPixelSize(android.R.dimen.app_icon_size); 

    CustomGrid adapter = new CustomGrid(view.getContext(), iconSize); 
    GridView gridview = (GridView) view.findViewById(R.id.grid); 
    gridview.setAdapter(adapter); 

    gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
      Toast.makeText(view.getContext(), "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show(); 
      Log.d("MyApp", "I am here"); 

      //setContentView(R.layout.list_item_main); 

      ListItemMainFragment nextFrag = new ListItemMainFragment(); 

      FragmentTransaction ft = getFragmentManager().beginTransaction(); 

      ft.replace(R.id.grid, nextFrag); 
      ft.setTransition(FragmentTransaction.TRANSIT_NONE);// it will anim while calling fragment. 
      ft.addToBackStack(null); // it will manage back stack of fragments. 
      ft.commit(); 
     } 
    }); 

    return view; 
} 
} 

フラグメントリソースファイル:交換用

<GridView 
    android:numColumns="auto_fit" 
    android:gravity="center" 
    android:columnWidth="100dp" 
    android:stretchMode="columnWidth" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/grid" 
    /> 

</RelativeLayout> 

フラグメント:

public class ListItemMainFragment extends Fragment implements Item.DataListener { 
private ListView mListView; 

public ListItemMainFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.list_item_main, container, false); 
    mListView = (ListView) view.findViewById(R.id.item_list_view); 

    //final String DBReference = "all/" + position + "/" + web[+position]; 
    final String DBReference = "all/0/Doctors"; 
    Item.getRecipesFromDB(ListItemMainFragment.this, DBReference); 

    return view; 
} 

@Override 
public void newDataReceived(ArrayList<Item> itemList) { 
    ItemAdapter adapter = new ItemAdapter(mListView.getContext(), itemList); 
    mListView.setAdapter(adapter); 
} 
} 

項目リストリソースファイル:

<ListView 
    android:id="@+id/item_list_view" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent"> 
</ListView> 

+0

それは 'GridView'の' OnItemClickListener'で 'FragmentTransaction'だように見えます。 'Fragment'を' GridView'に入れようとしています。 - 'ft.replace(R.id.grid、nextFrag);' –

+0

私は '(ViewGroup)getView()。getParent())。getId()'というコードを使って、フラグメントコンテナのIDを取得しました。そうですか? – dacscan3669

+0

最初に 'OneFragment'をロードした' FragmentTransaction'で最初に渡した 'R.id'を使うことができます。また、 'Activity'が現在の' Fragment'自体の代わりにトランザクションを処理するほうが良いかもしれないことに言及します。 –

答えて

0

あなたのグリッドビューは、あなたがあなたのフラグメントを行っているコードでは、このandroid:id="@+id/content"ようなあなたの相対的なレイアウトにcontentと呼ばれるID(または他の名前)を追加し、ここであなたのFragment Resource file内にこれを行いますこのコード行ft.replace(R.id.grid, nextFrag);ft.replace(R.id.content, nextFrag);に編集してください。私は同じジレンマにあった、これは私のために働いた。

<RelativeLayout> 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:id="@+id/content" 

<GridView 
    android:numColumns="auto_fit" 
    android:gravity="center" 
    android:columnWidth="100dp" 
    android:stretchMode="columnWidth" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/grid" /> 

</RelativeLayout> 

Javaコードclass OneFragment

 ListItemMainFragment nextFrag = new ListItemMainFragment(); 
     FragmentTransaction ft = getFragmentManager().beginTransaction(); 

     ft.replace(R.id.content, nextFrag); 
     ft.setTransition(FragmentTransaction.TRANSIT_NONE);// it will anim while calling fragment. 
     ft.addToBackStack(null); // it will manage back stack of fragments. 
     ft.commit(); 
+0

ありがとうございます。コードサンプルは、この問題の解決に役立ちました。 – dacscan3669

+0

@ dacscan3669私の答えは正しいことを認めてください。 – crakama

+0

@ dacscan3669グリッドビューで画像をクリックすると、次のフラグメントを表示できるようになりましたか? – crakama

関連する問題