2014/09/02

[Java]ジェネリック クラス

Androidのリファレンスを読んでいるとたまーに、

public ArrayAdapter (Context context, int resource, int textViewResourceId, List<T> objects)
的な表記を目にするんだけど、そもそも<T>ってなに?

java Class<T>のTはどんな意味ですか???
で確認すると、動的に型を設定することができるみたいです。上のリンク先で紹介されているプログラムを書くと下のようになるみたい。
public class GenericClass <T> {
  void disp(T msg) {
    System.out.println(msg);
  }
}
で、Tの部分にStringを設定すると下のようになる。
GenericClass <String>  msg = new GenericClass <String>();
public class GenericClass <String> {
  void disp(String msg) {
    System.out.println(msg);
  }
}
Stringの部分をIntegerすると次のようになる。
GenericClass <Integer>  msg = new GenericClass <Integer>();
public class GenericClass <Integer> {
  void disp(Integer msg) {
    System.out.println(msg);
  }
}
これ、class設計が楽になるのかもしれないけど、可読性はどうなんだろうか?

便利は便利なんだけどね。

2014/09/01

[Android]db.insertの第二引数について

Saving Data in SQL Databasesと初めてのAndroid第三版を読み返しながらトランザクションの復習をしているのだが、db.insertメソッドの第二引数だけなんだかよくわからない。

insert()メソッドによるとどうやらカラムがNULLを許可していない場合、代わりに登録する値を設定するところのようだ。

すんごいすっきりした。

2014/08/31

[Android]intentを使って外部アプリから自分のアプリを起動

例えばブラウザアプリの共有メニューとかTwitterの共有メニューから自分のアプリを起動するにはどうすればいいのだろうか?

答えは、Intent機能を使えばいけそうだ。

<!-- AndroidManifest.xml -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="..."
    android:versionCode="1"
    android:versionName="1.0" >
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="..."
            android:label="..."
            android:parentActivityName="..." >
            <meta-data
                .. />
            <intent-filter>
              <action android:name="android.intent.action.SEND" />
              <category android:name="android.intent.category.DEFAULT" />
              <data android:mimeType="text/plain" />
            </intent-filter>
        </activity>
    </application>
</manifest>
AndroidManifest.xmlで共有時に開くactivityの設定と共有項目の設定を行う。
@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 // Get intent, action and MIME type
 Intent intent = getIntent();
 String action = intent.getAction();
 String type = intent.getType();
 if (Intent.ACTION_SEND.equals(action) && type != null) {
  if ("text/plain".equals(type)) {
   //intent.getStringExtra(Intent.EXTRA_TEXT)
  }
 }else

 }
}
上は共有元から呼ばれた時の処理

2014/08/30

[jQuery][jqplot]線グラフのメモリ線を非表示

線グラフを表示する時に、メモリ線を表示しない方法は、xaxisキーのshowGridlineをfalseにすればおk

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="./jquery.jqplot.min.js"></script>
$.jqplot('linechart', [...] ,{
    axes:{
      xaxis:{
        tickOptions:{
          showGridline:false
        }
      }
    }
});

2014/08/29

[jQuery][jqplot]線グラフの影を表示しない

折れ線グラフの影を表示しないようにするには以下のようにすればおk

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="./jquery.jqplot.min.js"></script>
jQuery(function($){
  $.jqplot('chartdiv',[...],{
    seriesDefaults: {
        trendline: {
            shadow: false
        },
        markerOptions: {
            shadow: false
        }
    }
  });
});

2014/08/28

[Objective-C][iOS]UILabelの高さ設定について

よくUILabelにUIFontと同じ高さを設定すると上下に見切れちゃう時があって困っていたんだけど、同じことに悩んでいる人がいて、その解決方法が書いてあった。

UILabel の高さ指定プラクティス

UIFont* font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]];
CGFloat leading = font.leading;

UILabel* label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, leading)] autorelease];
label.font = font;
つまり、UIFontのleadingプロパティーを使えばいいんですね。

2014/08/27

[jQuery][jqplot]積み重ねの棒グラフを作成

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="./jquery.jqplot.min.js"></script>
<script src="./plugins/jqplot.barRenderer.min.js"></script>
<script>
d = [
    [[1,2],[2,3]],
    [[1,4],[2,6]]
];
$.jqplot('barchart', d ,{
    stackSeries: true,
    seriesDefaults:{
      renderer:$.jqplot.BarRenderer,
      highlightMouseDown: true,
      pointLabels: {show: true}
    }
    axes:{
      xaxis:{
        renderer: $.jqplot.CategoryAxisRenderer
      }
      yaxis:{
        min:0
      }
    },
    series:['red','yellow']
});
</script>

2014/08/26

[android]List Viewを表示する

AndroidのLayoutsに掲載されているList Viewの作り方を勉強する

今回は、単純にString型の文字を順番に表示する。

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends ActionBarActivity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  String[] data = {"Tokyo\nhoge\nbar", "Osaka", "Nagoya", "Sapporo"};
  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, data);
  ListView listView = (ListView) findViewById(R.id.container);
  listView.setAdapter(adapter);


 }
 /* .... */

}
ここで、注意したい点は、android.R.layout.simple_list_item_1はデフォルトで用意されているlayoutなんですね。
てっきりxmlで自前で定義すると思っていたんだけど。
ここにはまってしまい、簡単なListを表示するのに、すんごい手こずってしまった。

後、今回は、単純なView上にListを表示しているだけないので問題はないのかもしれないが、本来であればsetContentViewメソッドのコールバックなりView設置完了後にListViewのadapterを呼ばないといけない気がするんだけどどうなんだろうか?

iOSのTableViewと違って動的に高さを変えてくれるので大変ありがたいんだけど、逆に固定化したい場合はどうすればいいのかまだわからない。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="vertical"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         >
     <ListView
               android:id="@+id/container" 
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:background="#00FF00"
               android:layout_weight="1"
               android:drawSelectorOnTop="true">
     </ListView>
</LinearLayout>
android:background属性でListViewの背景色を変更することができる。

2014/08/25

[jQuery][jqplot]グラフの影を表示しない

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="./jquery.jqplot.min.js"></script>
<script>
jQuery(function($){
  $.jqplot('chartdiv',[...],{
      grid: {
        shadow:false
      }
  }
});
</script>
<div id="chartdiv" style="height:500px;width:1000px; "></div>
shadowキーの値をfalseにすればおk
逆にデフォルトor trueにすれば表示されます。

2014/08/24

[jQuery][jqplot]グラフの枠線の色を変更

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="./jquery.jqplot.min.js"></script>
<script>
jQuery(function($){
  $.jqplot('chartdiv',[...],{
      grid: {
        borderColor:'#fbfbfb'
      }
  }
});
</script>
<div id="chartdiv" style="height:500px;width:1000px; "></div>
borderColorキーの値を変更すればおk