2016-08-23 4 views
1

私はArrayAdapter MealAdapterとリストの要素meal_itemを持っていますが、いくつかのtextviewsとFrameLayoutがあります。 imageviewをクリックすると、このFrameLayoutにフラグメントMealDetailsを入れたいと思います。 MealAdapterは、アクティビティではなく別のフラグメントで使用されます。リストの要素からの断片化トランザクション

私の項目がある:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#fff"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 
     <!--icon--> 
     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="2"> 
      <RelativeLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
       <ImageView 
        android:id="@+id/meal_number_icon" 
        android:layout_width="70dp" 
        android:layout_height="70dp" 
        android:padding="6dp" 
        android:src="@drawable/ic_menu_gallery" 
        android:layout_centerInParent="true" /> 
      </RelativeLayout> 
     </LinearLayout> 
     <!--name--> 
     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="4" 
      android:orientation="horizontal" 
      android:paddingBottom="10dp" 
      android:paddingTop="10dp"> 
      <LinearLayout 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="4" 
       android:orientation="vertical"> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/protein_source_name" 
        android:text="sdfsdfsdf" 
        android:textSize="15sp" 
        android:textStyle="bold"/> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/fat_source_name" 
        android:textSize="15sp" 
        android:textStyle="bold" 
        android:text="sdfsdfsdf"/> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/carb_source_name" 
        android:textSize="15sp" 
        android:textStyle="bold" 
        android:text="sdfsdfsdf"/> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/vegetable_source_name" 
        android:textSize="15sp" 
        android:textStyle="bold" 
        android:text="sdfsdfsdf"/> 
      </LinearLayout> 
      <LinearLayout 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:orientation="vertical"> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/protein_source_weight" 
        android:text="sdfsdfsdf" 
        android:textSize="15sp" 
        android:textStyle="bold"/> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/fat_source_weight" 
        android:textSize="15sp" 
        android:textStyle="bold" 
        android:text="sdfsdfsdf"/> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/carb_source_weight" 
        android:textSize="15sp" 
        android:textStyle="bold" 
        android:text="sdfsdfsdf"/> 
       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/vegetable_source_weight" 
        android:textSize="15sp" 
        android:textStyle="bold" 
        android:text="sdfsdfsdf"/> 
      </LinearLayout> 
      </LinearLayout> 
     <!-- refreshMeal --> 
     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="2"> 
      <RelativeLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
       <ImageView 
        android:id="@+id/meal_accept_icon" 
        android:layout_width="70dp" 
        android:layout_height="70dp" 
        android:padding="6dp" 
        android:src="@drawable/ic_menu_gallery" 
        android:layout_centerInParent="true" /> 
      </RelativeLayout> 
     </LinearLayout> 
     <!--info--> 
     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1"> 
      <RelativeLayout 
       android:id="@+id/info_layout" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
       <ImageView 
        android:id="@+id/meal_details_icon" 
        android:layout_width="40dp" 
        android:layout_height="40dp" 
        android:src="@drawable/ic_menu_gallery" 
        android:layout_centerInParent="true" 
        android:tint="#8a000000"/> 
      </RelativeLayout> 
     </LinearLayout> 
    </LinearLayout> 
    <FrameLayout 
     android:id="@+id/meal_frameLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="4dp" 
     android:layout_marginRight="4dp"> 
    </FrameLayout> 
</LinearLayout> 

とアダプタ:

public class MealAdapter extends ArrayAdapter { 

    List list = new ArrayList(); 
    private Context context; 

    public MealAdapter(Context context, int resource) { 
     super(context, resource); 
     this.context = context; 
    } 

    public static class DataHandler{ 
     ImageView numberIcon; 
     ImageView detailsIcon; 
     ImageView acceptIcon; 

     TextView proteinSourceName; 
     TextView fatSourceName; 
     TextView carbSourceName; 
     TextView vegetableSourceName; 

     TextView proteinSourceWeight; 
     TextView fatSourceWeight; 
     TextView carbSourceWeight; 
     TextView vegetableSourceWeight; 

     FrameLayout detailsLayout; 
    } 

    @Override 
    public void add(Object object) { 
     super.add(object); 
     list.add(object); 
    } 

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

    @Override 
    public Object getItem(int position) { 
     return this.list.get(position); 
    } 



    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     View view = convertView; 
     final DataHandler dataHandler; 

     if(convertView==null){ 
      LayoutInflater inflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.meal_item,parent,false); 
      dataHandler = new DataHandler(); 

      dataHandler.numberIcon = (ImageView) view.findViewById(R.id.meal_number_icon); 
      dataHandler.detailsIcon = (ImageView) view.findViewById(R.id.meal_details_icon); 
      dataHandler.acceptIcon = (ImageView) view.findViewById(R.id.meal_accept_icon); 

      dataHandler.proteinSourceName =(TextView) view.findViewById(R.id.protein_source_name); 
      dataHandler.fatSourceName =(TextView) view.findViewById(R.id.fat_source_name); 
      dataHandler.carbSourceName =(TextView) view.findViewById(R.id.carb_source_name); 
      dataHandler.vegetableSourceName =(TextView) view.findViewById(R.id.vegetable_source_name); 

      dataHandler.proteinSourceWeight =(TextView) view.findViewById(R.id.protein_source_weight); 
      dataHandler.fatSourceWeight =(TextView) view.findViewById(R.id.fat_source_weight); 
      dataHandler.carbSourceWeight =(TextView) view.findViewById(R.id.carb_source_weight); 
      dataHandler.vegetableSourceWeight =(TextView) view.findViewById(R.id.vegetable_source_weight); 

      dataHandler.detailsLayout=(FrameLayout)view.findViewById(R.id.meal_frameLayout); 
      view.setTag(dataHandler); 

     } 
     else{ 
      dataHandler=(DataHandler) view.getTag(); 
     } 
     LayoutInflater inflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     final MealDataProvider mealDataProvider; 
     mealDataProvider = (MealDataProvider) this.getItem(position); 

     dataHandler.numberIcon.setImageResource(mealDataProvider.getNumberIcon()); 
     dataHandler.detailsIcon.setImageResource(mealDataProvider.getShowIcon()); 
     dataHandler.acceptIcon.setImageResource(mealDataProvider.getAcceptIcon()); 

     dataHandler.proteinSourceName.setText(mealDataProvider.getProteinSourceName()); 
     dataHandler.fatSourceName.setText(mealDataProvider.getFatSourceName()); 
     dataHandler.carbSourceName.setText(mealDataProvider.getCarbSourceName()); 
     dataHandler.vegetableSourceName.setText(mealDataProvider.getVegetableSourceName()); 

     dataHandler.proteinSourceWeight.setText(mealDataProvider.getProteinSourceWeight()); 
     dataHandler.fatSourceWeight.setText(mealDataProvider.getFatSourceWeight()); 
     dataHandler.carbSourceWeight.setText(mealDataProvider.getCarbSourceWeight()); 
     dataHandler.vegetableSourceWeight.setText(mealDataProvider.getVegetableSourceWeight()); 


     dataHandler.detailsIcon.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getContext(),"click",Toast.LENGTH_LONG).show(); 
       MealDetails mealDetails = new MealDetails(); 
       FragmentTransaction ft = ((FragmentActivity)context).getSupportFragmentManager().beginTransaction(); 
       ft.replace(dataHandler.detailsLayout.getId(),mealDetails); 
      } 
     }); 

     return view; 
    } 

} 

onClick方法は動作しますが、何も起こりません、私click dataHandler.detailsIconにAndroidMonitor場合は何もありません(トーストを "クリック" があります)。

リストの要素にframelayoutのフラグメントを挿入するにはどうすればよいですか?

編集 私は約commit()を忘れてしまったので、今では、最初のリストの要素からのみFrameLayoutのためではなく、動作します。どのリストの要素をクリックしても問題はありません。フラグメントMealDetailsは常に同じFrameLayoutに配置されます。 おそらくすべてのFrameLayoutに同じID(?)があるので、それを解決する方法はありますか?

答えて

1

FragmentTransactionをcommit()に忘れました。

コミットしないと何も起こりません。 Android Studioもこれについて警告する必要があります。

+0

ありがとうございました!それは動作しますが、私の投稿を編集した別の問題があります – barmi

+0

'dataHandler.detailsLayout' idをDataProviderから要素の番号に変更すると、すべてのリストの要素は一意のIDを持つFrameLayoutを持ちます – barmi

関連する問題