ActivityとFragmentとChildFragmentの連動

ややこしいからメモ

Activity→Fragment→ChildFragmentのViewPagerである特定のViewPagerのpositionを呼び出したいとき

try {
   FragmentManager fm = ((MainActivity) context).getSupportFragmentManager();

   Fragment prev = fm.findFragmentByTag("たぐ");
   if (prev != null) {

      FragmentManager fmF =prev.getChildFragmentManager();
      ChildClass fragInFrag = (ChildClass)fmF.findFragmentByTag(
            "android:switcher:" + R.id.pager + ":1(ここはPositionを指定)");
      if (fragInFrag!= null){
         fragInFrag.なんかの動作();
      }

   }



} catch (ClassCastException e) {
   Log.e("TAG", "Can't get fragment manager");
}

ActivityからFragmentのフラグメントの動作を呼び出したいとき

//親fragmentの呼び出し
Fragment prev = getParentFragment().getFragmentManager().findFragmentByTag("たぐ");
if (prev != null) {
Class df = (Class) prev;
    df.なんかの動作();
 }

FragmentまたはChildFragmentからActivityを呼び出したいとき

MainActivity activity = (MainActivity) getActivity();
if(activity!=null)activity.なんか();

FragmentまたはChildFragmentからFragmentを呼び出したいとき

 try{
 FragmentManager fm = getActivity().getSupportFragmentManager();
 Fragment_class main = (Fragment_class)fm.findFragmentById(R.id.container);
 if (main != null){
 main.なんか
 }
 }catch(ClassCastException e){
 }

 

JPGのExifのorientationを削除する方法

マジで情報がなかった。

PHPの実装されたExif情報を操作するライブラリ「PEL」を使うやり方

 

もしコメントを入れたいなら↓で出来る

<?php
require_once(‘pel-0.9.1/PelJpeg.php’);

$filename = “DSC_3297.JPG”;
$jpeg = new PelJpeg($filename);
$app1 = $jpeg->getExif();

if ($app1) {
$tiff = $app1->getTiff();
$ifd0 = $tiff->getIfd();

if ($ifd0) {
$exif = $ifd0->getSubIfd(PelIfd::EXIF);
$text = “コメントです”;
$entry = $exif->getEntry(PelTag::USER_COMMENT);
if (!$entry) {
$entry = new PelEntryUserComment(mb_convert_encoding($text, “JIS”,
“auto”), “JIS”);
$exif->addEntry($entry);
} else {
$entry->setValue(mb_convert_encoding($text, “JIS”, “auto”), “JIS”);
}
file_put_contents($filename, $jpeg->getBytes());
}
}

しかしJPGの方向(orientation)を変えるのはどうしたらいいのだろうか

答え↓

$img_toPel = new PelJpeg ( $img_to );
$app1 = $img_toPel->getExif();

if ($app1) {
$tiff = $app1->getTiff();
$ifd0 = $tiff->getIfd();
$entry = $ifd0->getEntry(PelTag::ORIENTATION); // Orientation
echo $entry->getValue();
if (!$entry) {
$entry = new PelEntryShort( PelTag::ORIENTATION,1 );
$exif->addEntry($entry);
} else {
$entry->setValue(1);
}
file_put_contents ( $img_to, $img_toPel->getBytes () );
}

もしいろんな情報のExifを変えたい場合は

/pel/src/PelTag.php

のFormat: にそれぞれに適したフォーマット(PelTag::ORIENTATIONだったらPelEntryShort)が書いてる

書き方わかんない場合は

\pel\test\image-tests

を見たら一番早いそれぞれのGPS情報とかいろいろのサンプル書いてる

 

Androidのspinnerで同じ項目を選択したときにonItemSelectedが呼び出されない件

なんか仕様で呼び出されない

解決方法はカスタムspinnerを作る事!

package com.test;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.Spinner;

public class CustomSpinner extends Spinner {

   public CustomSpinner(Context context)
   { super(context); }

   public CustomSpinner(Context context, AttributeSet attrs)
   { super(context, attrs); }

   public CustomSpinner(Context context, AttributeSet attrs, int defStyle)
   { super(context, attrs, defStyle); }

   @Override public void
   setSelection(int position, boolean animate)
   {
      boolean sameSelected = position == getSelectedItemPosition();
      super.setSelection(position, animate);
      if (sameSelected) {
         // Spinner does not call the OnItemSelectedListener if the same item is selected, so do it manually now
         getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId());
      }
   }

   @Override public void
   setSelection(int position)
   {
      boolean sameSelected = position == getSelectedItemPosition();
      super.setSelection(position);
      if (sameSelected) {
         // Spinner does not call the OnItemSelectedListener if the same item is selected, so do it manually now
         getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId());
      }
   }
}

のCustomSpinnerクラスを作成

MainActivityで

CustomSpinner customSpinner;

を作って(インポートしてね!)

XMLは

<com.test.CustomSpinner
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/customSpinner"
    android:layout_weight="1" />

customSpinner= (CustomSpinner) layout.findViewById(R.id.customSpinner);

ってすれば普段通りの

customSpinner.setAdapter(adapter);
customSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> parent, View view,
                               final int position, long id) {
        if(powarOn) {
            powarOn = false ;
            return ;
        }
       //動作すること
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {

    }
});

で同じもの選択されたときにonItemSelectedが流れます