3

以下に示すように、展開可能なリストビューがあります。それぞれの子をクリックするとトーストメッセージがポップアップするようにしました。各子が独自のアクティビティ/フラグメントを開始する必要があり、これには個別の onClick() メソッドが必要でした。これを達成する方法を知っている人はいますか?ありがとう。注:私はSimonVTのslidemenuライブラリを使用しています.Androidプログラミングは初めてです。

MainActivity.java:

package press.linx.expandablelistdemo;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.xml.sax.SAXException;

import net.simonvt.menudrawer.MenuDrawer;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {

ExpandableListView exv;
MenuDrawer mDrawer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mDrawer = MenuDrawer.attach(this);
    mDrawer.setContentView(R.layout.activity_main);
    mDrawer.setMenuView(R.layout.leftmenu);

    exv=(ExpandableListView)findViewById(R.id.expandableListView1);
    exv.setAdapter(new MyAdapter(this));

    exv.setOnChildClickListener(new OnChildClickListener() {

        @Override
        public boolean onChildClick(ExpandableListView parent, View v,
                int groupPosition, int childPosition, long id) {
            // TODO Auto-generated method stub
            String itemclicked = MyAdapter.childList[groupPosition][childPosition];
            Toast.makeText(getApplicationContext(), "you clicked " + itemclicked, Toast.LENGTH_SHORT).show();
            return false;
        }

    });
}

private void setListAdapter(SimpleAdapter adapter) {
    // TODO Auto-generated method stub

}

@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;
}

}

MyAdapter.java

package press.linx.expandablelistdemo;


import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;

public class MyAdapter extends BaseExpandableListAdapter {
private Context context;
Typeface typeface;
String []parentList = {"Tech", "Best Of", "Art & Design", "Other"};

static String [][] childList = {
        {
            "All Tech", "Reviews", "Gaming", "Gadgets"
        },
        {
            "Android"
        },
        {
            "Architecture"
        },
        {
            "Infographics"
        }
};
public MyAdapter(Context context) {
    // TODO Auto-generated constructor stub
    this.context=context;

}

@Override
public Object getChild(int arg0, int arg1) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public long getChildId(int arg0, int arg1) {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
        ViewGroup parent) {
    // TODO Auto-generated method stub
    //typeface = Typeface.createFromAsset(context.getAssets(), "font/robotochild.ttf"); 
    TextView tv = new TextView(context);
    tv.setText(childList[groupPosition][childPosition]);
    tv.setPadding(30, 10, 0, 10);
    tv.setTextSize(15);
    //tv.setTypeface(typeface); 
    tv.setTextColor(Color.WHITE);
    return tv;
}

@Override
public int getChildrenCount(int groupPosition) {
    // TODO Auto-generated method stub
    return childList[groupPosition].length;
}

@Override
public Object getGroup(int groupPosition) {
    // TODO Auto-generated method stub
    return groupPosition;
}

@Override
public int getGroupCount() {
    // TODO Auto-generated method stub
    return parentList.length;
}

@Override
public long getGroupId(int groupPosition) {
    // TODO Auto-generated method stub
    return groupPosition;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    TextView tv = new TextView(context);
    typeface = Typeface.createFromAsset(context.getAssets(), "font/roboto.ttf"); 
    tv.setText(parentList[groupPosition]);
    tv.setPadding(50, 10, 0, 10);
    tv.setTextSize(20);
    tv.setTextColor(Color.WHITE);
    tv.setTypeface(typeface); 
    return tv;
}

@Override
public boolean hasStableIds() {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    // TODO Auto-generated method stub
    return true;
}

}

menulistview.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" 
android:background="@drawable/geowall">

<ExpandableListView
    android:id="@+id/expandableListView1"
    android:groupIndicator="@null"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:padding="3dp" >
</ExpandableListView>

ここ!

4

2 に答える 2

0

ボタンごとに異なる機能が必要な場合は、それらをボタンのtagプロパティとして (XML レイアウトで) 保存することを検討してください。リスナーのView vパラメーターは、クリックされている子の です。次に、次のようにタグを取得するために使用できます。onChildClickView

v.getTag();

タグに基づいて正しいアクティビティを呼び出すための switch-case ブロックを用意するか、アクティビティの正確な名前をタグに格納し、それをリフレクション経由で渡してアクティビティのクラスを取得することができます。または、タグ名からクラス/変数へのHashMapマッピングを保存することもできます。Activity

于 2013-04-11T02:32:22.297 に答える
0

これはあなたが探しているかもしれません。

Eclipse IDE でプロジェクトを作成することから始めましょう。

  1. File ⇒ New Android Project に移動して、新しいプロジェクトを作成します。詳細をすべて入力し、アクティビティに AndroidListViewActivity という名前を付けます。
  2. プロジェクトが作成されたら、メイン アクティビティの Java ファイル (この場合は AndroidListViewActivity.java) を開き、ListActivity からクラスを拡張します。

public class AndroidListViewActivity extends ListActivity { 3. 次に、すべてのリスト アイテム ラベルを格納するための文字列リソース ファイルが必要です。したがって、values フォルダーの下に XML ファイルを作成し、list_data.xml という名前を付けて、次のコードを貼り付けます。( res/values を右クリック ⇒ New ⇒ Android XML File)

list_data.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="adobe_products">
        <item>Adobe After Effects</item>
        <item>Adobe Bridge</item>
        <item>Adobe Dreamweaver</item>
        <item>Adobe Edge</item>
        <item>Adobe Fireworks</item>
        <item>Adobe Flash</item>
        <item>Adobe Photoshop</item>
        <item>Adobe Premiere</item>
        <item>Adobe Reader</item>
        <item>Adobe Illustrator</item>
    </string-array>
</resources>
  1. ListView では、各リスト項目は xml レイアウトになるため、各リスト項目をカスタマイズできます。res/layout フォルダーの下に XML ファイルを作成し、list_item.xml という名前を付けて、次のコードを入力します。この xml レイアウトは、単一のリスト アイテム行になります。( res/layout を右クリック ⇒ New ⇒ Android XML File)

  2. メイン アクティビティ Java ファイル (AndroidListViewActivity.java) を開き、次のコードを入力します。次のコードでは、すべての xml リソース データをインポートし、それらを配列に格納しています。次のステップでは、配列を ListAdapter にバインドしています。

AndroidListViewActivity.java

package com.androidhive.androidlistview;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class AndroidListViewActivity extends ListActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // storing string resources into Array
        String[] adobe_products = getResources().getStringArray(R.array.adobe_products);

        // Binding resources Array to ListAdapter
        this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, adobe_products));

    }
}
  1. プロジェクトを実行すると、配列項目のリストを含むリストビューが表示されます。ただし、単一のリスト項目をクリックしても、アクションは表示されません。そのため、単一のリスト項目を選択して新しいアクティビティを開始する必要があります。

単一のリスト項目を選択して新しいアクティビティを起動する 前回の記事で、画面を切り替える方法について説明しました。ここでは、単一のリスト アイテムの詳細を新しい画面に表示します。

  1. src フォルダーの下に新しいアクティビティ クラスを作成します。src/package フォルダー ⇒ New ⇒ Class を右クリックし、SingleListItem という名前を付けます。(SingleListItem.java)
  2. AndroidListViewActivity.java を開き、コードを次のように変更します。次のコードでは、選択したリスト アイテムの文字列 (製品名) を取得し、それを新しいアクティビティに送信しています。

AndroidListViewActivity.java

package com.androidhive.androidlistview;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class AndroidListViewActivity extends ListActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // storing string resources into Array
        String[] adobe_products = getResources().getStringArray(R.array.adobe_products);

        // Binding resources Array to ListAdapter
        this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, adobe_products));

        ListView lv = getListView();

        // listening to single list item on click
        lv.setOnItemClickListener(new OnItemClickListener() {
          public void onItemClick(AdapterView<?> parent, View view,
              int position, long id) {

              // selected item 
              String product = ((TextView) view).getText().toString();

              // Launching new Activity on selecting single List Item
              Intent i = new Intent(getApplicationContext(), SingleListItem.class);
              // sending data to new activity
              i.putExtra("product", product);
              startActivity(i);

          }
        });
    }
}

新しいアクティビティでは、受信したリストビュー アクティビティを表示する必要があります。

  1. res/layout の下に新しい xml ファイルを作成し、single_list_item_view.xml という名前を付けて、次のコードを入力します。この XML ファイルは、SingleListItem.java のレイアウトになります。

single_list_item_view.xml

<?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">
  <TextView android:id="@+id/product_label"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textSize="25dip"
            android:textStyle="bold"
            android:padding="10dip"
            android:textColor="#ffffff"/>    
</LinearLayout>
  1. 2 つ目のアクティビティ ファイル (SingleListItem.java) を開いて、次のコードを貼り付けます。

SingleListItem.java

package com.androidhive.androidlistview;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class SingleListItem extends Activity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.single_list_item_view);

        TextView txtProduct = (TextView) findViewById(R.id.product_label);

        Intent i = getIntent();
        // getting attached intent data
        String product = i.getStringExtra("product");
        // displaying selected product name
        txtProduct.setText(product);

    }
}
  1. 最後のステップは、AndroidManifest.xml ファイルに新しいアクティビティ名のエントリを追加することです。AndroidManifest.xml ファイルを開き、次のようにコードを変更します。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.androidhive.androidlistview"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".AndroidListViewActivity"
                  android:label="Android List View">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".SingleListItem"
                    android:label="Single Item Selected"></activity>
    </application>
</manifest>
  1. 最後に、プロジェクト フォルダー ⇒ Run As ⇒ 1 Android Application を右クリックして、プロジェクトを実行します。
于 2013-07-05T07:05:15.390 に答える