2013年12月30日月曜日

ListFragmentを使ってみる(クリック、長押しクリックの設定)

前回の「ListFragmentを使ってみる」に続き今回もListFragmentについて(`・ω・´)シャキーン
今回はリストにクリックイベントを設定したいと思います。

前回はActivity内でListFragmentを生成してAdapterの設定までを行っていましたが、
今回はListFragmentを継承するMyListFragmentを作成して、
そこに設定とクリックイベントの処理を記述していきたいと思います。

■AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.listfragment2"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.listfragment2.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
■activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

</LinearLayout>
■MyListFragment.java

ListFragmentを継承したクラスになります。
Adapterにデータを追加する処理、クリックイベント、長押しイベントの処理などを設定しています。
package com.example.listfragment2;

import java.util.ArrayList;

import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MyListFragment extends ListFragment {

 private static final String TAG = "MyListFragment";

 private ArrayList<String> mList = new ArrayList<String>();

 /*
  * 親となるActivityの「onCreate」の終了を知らせる
  * @see android.support.v4.app.Fragment#onActivityCreated(android.os.Bundle)
  */
 @Override
 public void onActivityCreated(Bundle savedInstanceState) {
  super.onActivityCreated(savedInstanceState);

  Log.d(TAG, "onActivityCreated");

  // アダプター生成
  ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
    android.R.layout.simple_list_item_1, mList);

  // アダプターの設定
  setListAdapter(adapter);

  //
  getListView().setOnItemLongClickListener(new OnItemLongClickListener() {

   /*
    * アイテムの長押し
    * 
    * @see
    * android.widget.AdapterView.OnItemLongClickListener#onItemLongClick
    * (android.widget.AdapterView, android.view.View, int, long)
    */
   @Override
   public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
     int arg2, long arg3) {
    Log.d(TAG, "onItemLongClick arg2 => " + arg2 + " : arg3 => "
      + arg3);
    return true;
   }
  });

 }

 /*
  * アイテムの追加
  */
 public void add(String message) {

  mList.add(message);

 }

 /*
  * アイテムのクリック
  * 
  * @see
  * android.support.v4.app.ListFragment#onListItemClick(android.widget.ListView
  * , android.view.View, int, long)
  */
 @Override
 public void onListItemClick(ListView l, View v, int position, long id) {
  Log.d(TAG, "onListItemClick position => " + position + " : id => " + id);
 }

}

■MainActivity.java
package com.example.listfragment2;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.ListFragment;
import android.view.Menu;
import android.widget.ArrayAdapter;

public class MainActivity extends FragmentActivity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  // ListFragmentを生成
  MyListFragment fragment = new MyListFragment();

  // Fragmentを経由してAdapterにデータをセット
  fragment.add("LIST 1");
  fragment.add("LIST 2");
  fragment.add("LIST 3");
  fragment.add("LIST 4");
  fragment.add("LIST 5");
  fragment.add("LIST 6");
  fragment.add("LIST 7");
  fragment.add("LIST 8");
  fragment.add("LIST 9");
  fragment.add("LIST 10");

  // ListFragmentを追加する
  FragmentManager manager = getSupportFragmentManager();
  FragmentTransaction tx = manager.beginTransaction();
  tx.add(R.id.list, fragment, "list_fragment");
  tx.commit();

 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

}

実行結果は次のようになります。


12-30 13:55:46.335: D/MyListFragment(3465): onListItemClick position => 0 : id => 0
12-30 13:55:46.955: D/MyListFragment(3465): onListItemClick position => 1 : id => 1
12-30 13:55:47.405: D/MyListFragment(3465): onListItemClick position => 2 : id => 2
12-30 13:55:48.595: D/MyListFragment(3465): onItemLongClick arg2 => 3 : arg3 => 3

以上です(`・ω・´)ゞビシッ!!

参考URL

0 件のコメント:

コメントを投稿