Android:在动态ScrollView中使LinearLayout可单击

时间:2014-04-24 01:19:54

标签: android android-layout

我在水平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。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

你要做的似乎是一个非常糟糕的代码练习。您应该使用ListView定义适当的适配器并为行布局充气,设置

android:clickable="false" 
android:focusable="false"

列表行的每个内部窗口小部件

这样您就可以为列表正确配置onIemClickListener

网上有很多教程......如果你很懒,不想谷歌see this