我在水平LinearLayout中显示带有图像和各种信息的事件列表。我想在用户点击LinearLayout中包含的任何信息时启动一个新的Activity。
显示列表的活动(EventListActivity)具有此.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/crimson"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true">
<LinearLayout
android:id="@+id/event"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:clickable="true"
android:onClick="listItemClick"
android:background="?android:attr/selectableItemBackground" >
<ImageView
android:id="@+id/logo"
android:layout_width="50px"
android:layout_height="50px"
android:layout_marginLeft="5px"
android:layout_marginRight="20px"
android:layout_marginTop="5px"
android:clickable="true"
android:onClick="listItemClick"
android:src="@drawable/alabama" >
</ImageView>
<LinearLayout
android:orientation="vertical"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="fill_parent">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="4.85"
android:text="@+id/title"
android:textColor="@color/white"
android:textSize="20px" >
</TextView>
<TextView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="4.85"
android:text="@+id/date"
android:textColor="@color/white"
android:textSize="10px" >
</TextView>
<TextView
android:id="@+id/venue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="4.85"
android:text="@+id/venue"
android:textColor="@color/white"
android:textSize="10px" >
</TextView>
</LinearLayout>
</LinearLayout>
</ScrollView>
该列表填充在EventListActivity.java文件中,包含以下相关部分:
public class EventListActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Event[] eventList = null;
try {
eventList = getEventList();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
MobileArrayAdapter adapter = new MobileArrayAdapter(this, eventList);
setListAdapter(adapter);
}
public void listItemClick(View view)
{
// launch new Activity
}
public static Event[] getEventList() throws Exception
{
String url = "http://url.com";
String json = new JSONReader().execute(url).get();
JSONArray jsonarr = new JSONArray(json);
// eventually from web service
Event[] eventList = new Event[jsonarr.length()];
for (int i = 0; i < jsonarr.length(); i++)
{
JSONObject jsonobj = jsonarr.getJSONObject(i);
String title = jsonobj.getString("eventName");
String date = "April " + (i+1);
String time = jsonobj.getString("eventTime");
String sport = jsonobj.getString("eventType");
String opponent = jsonobj.getString("opponent");
String venue = jsonobj.getString("eventVenue");
String location = jsonobj.getString("location");
// Location l = new Location(location);
eventList[i] = new Event(title, date, time, sport, opponent, venue, location);
}
return eventList;
}
如何让用户点击LinearLayout的任何部分并启动新的活动?最初,我尝试使用OnItemClickListener执行此操作,但后来意识到我没有使用ListView。那么我想我会这样做,但主要的问题是事件是动态填充的,我不知道如何指定被点击的事件,因为onClick
只接受一个参数,一个View
。我怎么能这样做?
答案 0 :(得分:0)
你要做的似乎是一个非常糟糕的代码练习。您应该使用ListView
定义适当的适配器并为行布局充气,设置
android:clickable="false"
android:focusable="false"
列表行的每个内部窗口小部件
这样您就可以为列表正确配置onIemClickListener
网上有很多教程......如果你很懒,不想谷歌see this。