2016-12-22 3 views
0

2つのクラスがあります。最初はFragmentA、もう1つはListRequestAdapter(ArrayAdapter)です。 ListRequestAdapterImageViewを私のFragmentAから変更しました。しかし私はFragmentAでImageViewを宣言するといつもエラーNullPointerExceptionが出ます。どうすればいい?ここで別のクラスからイメージビューソースを変更するには?

は私のコードです:

FragmentA.javaクラス:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_item_list_request, container, false); 
    setHasOptionsMenu(true); 


    listPhoto = (ImageView) getView().findViewById(R.id.listPhoto); 
    listPhoto.setImageResource(R.drawable.pastel_blue); 

    } 

ListRequestAdapter.javaクラス:

public class ListRequestAdapter extends ArrayAdapter<ListRequestItem> { 
ImageView listPhoto; 

public ListRequestAdapter(Context context, List<ListRequestItem> items) 
{ 
    super(context, R.layout.style_fragment_list_request, items); 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder viewHolder; 

    if(convertView == null) { 
     // inflate the GridView item layout 
     LayoutInflater inflater = LayoutInflater.from(getContext()); 
     convertView = inflater.inflate(R.layout.style_fragment_list_request, parent, false); 

     // initialize the view holder 
     viewHolder = new ViewHolder(); 
     viewHolder.tvTanggal = (TextView) convertView.findViewById(R.id.tvTanggalRequest); 
     viewHolder.tvTipe = (TextView) convertView.findViewById(R.id.tvTipeRequest); 
     viewHolder.tvStatus = (TextView) convertView.findViewById(R.id.tvStatus); 
     viewHolder.permitid = ""; 
     convertView.setTag(viewHolder); 
    } else { 
     // recycle the already inflated view 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    // update the item view 
    ListRequestItem item = getItem(position); 
    viewHolder.tvTanggal.setText(item.tanggal); 
    viewHolder.tvTipe.setText(item.tipe); 
    viewHolder.tvStatus.setText(item.status); 
    viewHolder.permitid = item.permitid; 
    return convertView; 
} 

private static class ViewHolder { 
    TextView tvTanggal; 
    TextView tvTipe; 
    TextView tvStatus; 
    String permitid; 
} 
} 

リスト項目のレイアウト:

ちょうどこのよう ImageViewが含まれているレイアウトを膨張させることによって解決
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:tag="reqtag" 
android:id="@+id/rlListRequestWorkflow" 
> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:orientation="horizontal" 
    android:weightSum="1" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_weight="0.2" 
     android:orientation="vertical" 
     android:layout_height="wrap_content"> 

     <!--ImageView here--> 
     <de.hdodenhof.circleimageview.CircleImageView 
      android:id="@+id/listPhoto" 
      android:layout_width="65dp" 
      android:layout_height="63dp" 
      android:layout_weight="1" 
      android:layout_gravity="center_horizontal" 
      android:src="@drawable/ic_menu_camera" 
      android:layout_marginTop="10dp" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_weight="0.8" 
     android:orientation="vertical" 
     android:layout_height="wrap_content"> 

     <!--All textViews here--> 
     <TextView 
      android:layout_width="100dp" 
      android:layout_weight="1" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="Type" 
      android:textSize="18dp" 
      android:fontFamily="sans-serif" 
      android:textColor="@color/black" 
      android:id="@+id/tvTipeRequest" 
      android:width="130dp" /> 

     <TextView 
      android:layout_width="100dp" 
      android:layout_weight="1" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="Date" 
      android:fontFamily="sans-serif" 
      android:id="@+id/tvTanggalRequest" 
      android:textSize="15dp" 
      android:width="130dp" /> 

     <TextView 
      android:layout_width="100dp" 
      android:layout_weight="1" 
      android:layout_height="50dp" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:textColor="@color/black" 
      android:text="Status" 
      android:textSize="15dp" 
      android:fontFamily="sans-serif" 
      android:id="@+id/tvStatus" 
      android:layout_column="38" /> 
    </LinearLayout> 

</LinearLayout> 
+0

"listadapterクラスのimageviewをメインアクティビティクラスから変更したかった"アクティビティ?確かに? – user5195185

+0

申し訳ありません、そのフラグメント – Borom1r

+0

@ Borom1r 'ListRequestAdapter'はフラグメントではなく、' ArrayAdapter'を拡張しています(* FragmentA.java *は* MainActivity.java *の代わりに名前として適合しているようです) – Fllo

答えて

1

あなたの答えはリストビューでImageViewのをupateするお手伝いをしていません。何も関係のない新しいView(anotherView)を作成するだけです。 ListViewでImageViewを更新するには、DataListにいくつかの関連情報(ImageIDまたはImagePathなど)が必要です。情報が設定/更新されたら、あなたのフラグメント内でadapter.notifyDataSetChanged()を呼び出してください。また

、あなたはこのように、データなし場合ImageViewのを隠すために、あなたのListRequestAdapterを変更することがあります。

public class ListRequestAdapter extends ArrayAdapter<ListRequestItem> { 

    public ListRequestAdapter(Context context, List<ListRequestItem> items){ 
     super(context, R.layout.style_fragment_list_request, items); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder viewHolder; 
     if(convertView == null) { 
      // inflate the GridView item layout 
      LayoutInflater inflater = LayoutInflater.from(getContext()); 
      convertView = inflater.inflate(R.layout.style_fragment_list_request, parent, false); 
      // initialize the view holder 
      viewHolder = new ViewHolder(); 
      viewHolder.imgPhoto = (ImageView) convertView.findViewById(R.id.listPhoto); 
      viewHolder.tvTanggal = (TextView) convertView.findViewById(R.id.tvTanggalRequest); 
      viewHolder.tvTipe = (TextView) convertView.findViewById(R.id.tvTipeRequest); 
      viewHolder.tvStatus = (TextView) convertView.findViewById(R.id.tvStatus); 
      viewHolder.permitid = ""; 
      convertView.setTag(viewHolder); 
     } else { 
      // recycle the already inflated view 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 
     // update the item view 
     ListRequestItem item = getItem(position); 

     // Setup ImageView accord to DataList, 
     // may be imageID from DataList. 
     if(imageID == null) viewHolder.imgPhoto.setVisibility(View.INVISIBLE); 
     else{ 
      viewHolder.imgPhoto.setImageResource(item.imageID); 
      viewHolder.setVisibility(VIEW_VISIBLE); 
     } 

     viewHolder.tvTanggal.setText(item.tanggal); 
     viewHolder.tvTipe.setText(item.tipe); 
     viewHolder.tvStatus.setText(item.status); 
     viewHolder.permitid = item.permitid; 
     return convertView; 
    } 

    private static class ViewHolder { 
     ImageView imgPhoto; 
     TextView tvTanggal; 
     TextView tvTipe; 
     TextView tvStatus; 
     String permitid; 
    } 
} 

・ホープこのヘルプ!

+0

niceeeeeこれは魅力的な作品です!ありがとうございました – Borom1r

0

問題:

View anotherView =  inflater.inflate(R.layout.style_fragment_list_request,container,false); 
imgView = (ImageView)anotherView.findViewById(R.id.listPhoto);` 
関連する問題