我对ExpandableListView
的childPosition实施onclick
意向问题。基本上,我正在创建一个简单的食谱应用程序。该应用程序有4个父母职位(早餐,沙拉,主菜和小吃)。每个父母职位下面有2个项目。我希望能够点击子项目并加载新的意图(或页面)。Android Dev:通过Onclick展开ExpandableList子项的方法方法
例如,点击儿童香蕉煎饼时,我希望它加载breakfast_banana_pancakes.xml文件。该文件将包含图片和配方说明。
我知道这可能不是最佳的方式来做到这一点,但我正在做一个课程,并且不允许使用任何数据库或让应用程序使用任何权限。
这是我的mainScreen xml文件中的代码。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android1="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/paleoportraitxhdpi"
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=".MainScreen" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/textViewPaleoFact"
android:layout_alignParentLeft="true"
android:paddingRight="4dp"
android:text="@string/paleoFactText" />
<TextView
android:id="@+id/textViewPaleoFact"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/textView1"
android:text="@string/paleoFactText"
android:textSize="12sp" />
<ExpandableListView
android1:id="@+id/expandableListView1"
android1:layout_width="match_parent"
android1:layout_height="250dp"
android1:layout_alignLeft="@+id/textView1"
android1:layout_alignParentTop="true"
android1:layout_marginTop="14dp"
android1:padding="10dp" >
</ExpandableListView>
这是我为我的mainScreenJava文件的代码。
public class MainScreen extends Activity {
ExpandableListView exv;
// Random Paleo Fact Via Strings.xml
String[] myString;
final Random rgenerator = new Random();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_screen);
exv=(ExpandableListView)findViewById(R.id.expandableListView1);
exv.setAdapter(new MyAdapter(this));
//Paleo Fact
Resources res = getResources();
myString = res.getStringArray(R.array.paleoFacts);
String q = myString[rgenerator.nextInt(myString.length)];
TextView tv2 = (TextView)findViewById(R.id.textViewPaleoFact);
tv2.setText(q);
}
@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_screen, menu);
return true;
}
}
这里是我的myAdapter文件中的代码,它控制我的扩展列表
@SuppressWarnings("unused")
public class MyAdapter extends BaseExpandableListAdapter {
private Context context;
String []parentList={"Breakfast", "Salads", "Main Dishes", "Snacks"};
String [][]childList={
{
"Banana Pancakes", "Breakfast Casserole"
},
{
"Bacon Chickn Avacado Salad", "Curried Salmon Salad"
},
{
"Watercress Bacon Soup", "Spicy Chicken and Bacon Poppers"
},
{
"Primal Trail Mix", "Fat Guacamole Devils"
},
};
public MyAdapter(Context context) {
// TODO Auto-generated constructor stub
this.context=context;
}
public Object getChild(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return null;
}
public long getChildId(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return 0;
}
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
TextView tv=new TextView(context);
tv.setText(childList[groupPosition][childPosition]);
tv.setPadding(100, 15, 0, 15);
return tv;
}
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
return childList[groupPosition].length;
}
public Object getGroup(int groupPosition) {
// TODO Auto-generated method stub
return groupPosition;
}
public int getGroupCount() {
// TODO Auto-generated method stub
return parentList.length;
}
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return groupPosition;
}
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
TextView tv=new TextView(context);
tv.setText(parentList[groupPosition]);
tv.setPadding(60, 15, 0, 15);
return tv;
}
public boolean hasStableIds() {
// TODO Auto-generated method stub
return false;
}
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return true;
}
}
这里是我试过MyAdapter.java文件
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
if(groupPosition == 0 && childPosition == 0){
Intent i = new Intent(v.getContext(), breakfast_banana_pancakes.class);
v.getContext().startActivity(i);
Log.e ("Banana", "Banana pancakes was clicked");
}
//Intent i = new Intent(mActivity, TargetActivity.class);
//i.putExtra(TargetActivity.EXTRA_WHATEVER, MyAdapter.getChild(groupPosition, childPosition));
//startActivity(i);
return true;
}
槽糕。这似乎并不奏效。我尝试过几种方式修改你的代码。我结束了对你的嵌套代码的评论,并试图运行一个log.e消息,但这仍然不起作用。 我已经在上面添加了新代码,以显示我如何在MyAdapter.java文件中实现它。 – NaCo
用您所需要的更新答案。您不要将其添加到适配器(除非您将适配器用作侦听器,但通常情况并非如此)。您还需要确保它正在侦听(代码示例的最后一行)。 –
Ohhhh人!你太棒了。这很好用!谢谢你的协助! – NaCo