2016-10-25 11 views
0

にGridViewコントロールにアダプタからのデータを埋めることができないよう:は、次の私は断片クラス内のアダプタクラスを持つフラグメント

更新:

public class FeedBackFragment extends Fragment { 

ProgressDialog pDialog; 
JSONParser jsonParser = new JSONParser(); 


MyAdapter adapter; 
ArrayList<Item> manufacturersList = new ArrayList<>(); 
JSONArray manufacturers = null; 

// manufacturers JSON url 
private static final String URL_MANUFACTURERS = "URL"; 

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

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.feedback_gridview_manufacturer, container, false); 

    GridView gridView = (GridView) view.findViewById(R.id.gridview); 
    // gridView.setAdapter(new MyAdapter(getActivity(), manufacturersList)); 

    adapter = new MyAdapter(getActivity(), manufacturersList); 
    gridView.setAdapter(adapter); 


    gridView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View view, int arg2, long arg3) { 
      // on selecting a single manufacturer 
      // CategoryCarActivity will be launched to show category car inside the manufacturer 
      Intent i = new Intent(getActivity(), CategoryCarActivity.class); 

      // send manufacturer id to activity to get list of cars under that manufacturer 
      String manufacturer_id = ((TextView) view.findViewById(R.id.manufacturer_id)).getText().toString(); 
      i.putExtra("manufacturer_id", manufacturer_id); 

      startActivity(i); 
     } 
    }); 

    return view; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onActivityCreated(savedInstanceState); 

    // manufacturersList = new ArrayList<>(); 
    new LoadAllManufacturers().execute(); 
} 


class LoadAllManufacturers extends AsyncTask<String, String, String> { 
    /** 
    * Before starting background thread Show Progress Dialog 
    * */ 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(getActivity()); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 

    /** 
    * After completing background task Dismiss the progress dialog 
    * **/ 
    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 

     adapter.notifyDataSetChanged(); 
     // dismiss the dialog after getting all manufacturers 
     if (pDialog.isShowing()) 
      pDialog.dismiss(); 
    } 
} 

private class MyAdapter extends BaseAdapter 
{ 
    private LayoutInflater inflater; 

    public MyAdapter(Context context, ArrayList<Item> arrayList) 
    { 
     this.manufacturersList = arrayList; 
     inflater = LayoutInflater.from(context); 
    } 

    @Override 
    public int getCount() { 
     return manufacturersList.size(); 
    } 

    @Override 
    public Object getItem(int i) 
    { 
     return manufacturersList.get(i); 
    } 

    @Override 
    public long getItemId(int i) 
    { 
     return manufacturersList.get(i).drawableId; 
    } 

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) 
    { 
     View v = view; 
     ImageView picture; 
     TextView name; 

     if(v == null) 
     { 
      v = inflater.inflate(R.layout.gridview_item, viewGroup, false); 
      v.setTag(R.id.picture, v.findViewById(R.id.picture)); 
      v.setTag(R.id.text, v.findViewById(R.id.text)); 
     } 

     picture = (ImageView)v.getTag(R.id.picture); 
     name = (TextView)v.getTag(R.id.text); 

     picture.setImageResource(item.drawableId); 
     name.setText(item.name); 

     return v; 
    } 
    } 
} 

Item.java

public class Item 
{ 
    final String name; 
    final int drawableId; 
Item(String name, int drawableId) 
{ 
    this.name = name; 
    this.drawableId = drawableId; 
} 

}

My gridview_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<com.totoroads.android.app.SquareImageView 
    android:id="@+id/picture" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scaleType="centerCrop" 
    /> 
<TextView 
    android:id="@+id/text" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingLeft="10dp" 
    android:paddingRight="10dp" 
    android:paddingTop="15dp" 
    android:paddingBottom="15dp" 
    android:layout_gravity="bottom" 
    android:textColor="@android:color/white" 
    android:background="#55000000" 
    /> 

私はPOJOクラス内のアダプタクラスのデータを埋めることができませんか? ArrayList manufacturerListをPOJOにどのように変更するか分からず、誰も手助けする必要があります。私はラインで多くの方法が、不成功

更新、原因のエラーを検索してみています:あなたは、あなたのアダプタのコンストラクタを変更し、代わりにHashMapのItemオブジェクトのリストを受け取るべき

picture.setImageResource(item.drawableId); 
    name.setText(item.name); 
+0

'項目項目=(項目)のgetItem(i)をArrayListに追加してください;'完全に間違って。あなたのgetItem()は、クラス型 'Item'のオブジェクトではないところでHashMapを返します – Kunu

+0

ハッシュマップではなく、' ArrayList 'オブジェクトリストをアダプタに渡すほうがいい – Kunu

+0

Item item =(Item)getItem(i)HashMapを返します。私の問題はArrayList への明確な変更ではありません、あなたは私に詳細を教えてください? – luongkhanh

答えて

0

メーカー一覧ArrayList

private LayoutInflater inflater; 

public MyAdapter(Context context, ArrayList<Item> arrayList) 
{ 
    this.manufacturersList = arrayList; 
    inflater = LayoutInflater.from(context); 
} 

@Override 
public int getCount() { 
    return manufacturersList.size(); 
} 

@Override 
public Object getItem(int i) 
{ 
    return manufacturersList.get(i); 
} 

@Override 
public long getItemId(int i) 
{ 
    return manufacturersList.get(i).drawableId; 
} 

また、アクティビティでもアクセスできるように、Itemクラスをグローバルにしてください。

そして、あなたのAsyncTastではなく、HashMapのにデータを追加するには

ArrayList<Item> manufacturersList = new ArrayList<>(); // declare outside your AsyncTask 


//Inside AsyncTask loop 

Item item = new Item(name,id); // I hope id is your drawableID 
manufacturersList.add(item); 
+0

私は今、あなたに戻ってみます – luongkhanh

+0

@ Hi Kunu、それはAsyncTaskでHashMapを定義したので、アダプタはHashMapからList に変更できません。私は完全な私のクラスManufacturerFragmentを再投稿しました、あなたは上記のように再検討することができます – luongkhanh

+0

@luongkhanh私の編集された答えをチェックしてください。 – Kunu

関連する問題