2013-04-11 19 views
3

我有一個expandablelistview,如下所示。我已經做到了,每個孩子被點擊時,都會彈出一條吐司消息。我需要每個孩子開始自己的活動/片段,這需要單獨的onClick()方法。有人知道這可以實現嗎?謝謝。注意:我正在使用SimonVT的slidingmenu庫,我對android編程非常陌生。爲expandablelistview的子項製作單獨的onClick()方法

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> 

HERE

回答

0

如果您希望每個按鈕有不同的功能,請考慮將它們存儲爲按鈕的'tag屬性(在XML佈局中)。 onChildClick監聽器中的View v參數是被點擊的孩子的View;那麼它可以用來檢索標籤,就像這樣:

v.getTag();

你既可以擁有的switch-case塊基於標籤來調用正確的活動,或儲存的的確切名活動標記中,並通過反射傳遞以檢索活動的類。或者,您可以存儲將標記名映射到Activity類/變量的HashMap

0

這可能是你正在尋找。

讓我們開始在Eclipse IDE中創建一個項目。

  1. 轉到File⇒新建Android項目創建一個新項目。填寫所有細節並將您的活動命名爲AndroidListViewActivity。
  2. 創建項目後,打開主要活動java文件(在本例中爲AndroidListViewActivity.java)並從ListActivity擴展該類。

public class AndroidListViewActivity extends ListActivity { 3.現在我們需要一個字符串資源文件來存儲所有列表項標籤。因此,在值文件夾下創建一個XML文件,並將其命名爲list_data.xml並粘貼以下代碼。 (右鍵點擊RES /值⇒新⇒Android的XML文件)

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 /佈局⇒新⇒Android的XML文件)

  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. 現在打開你的第二個活動文件即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. 最後通過對項目文件夾中右擊運行項目⇒運行方式⇒1個Android應用程序。
相關問題