listview中的onItemClickListener不能与Android中的TabActivity一起使用

时间:2011-04-22 04:23:32

标签: android android-listview tabactivity

我制作了一个包含各种标签的应用程序。每个选项卡都有不同的ListActivity。当我使用TabWidget作为启动器启动应用程序并单击选项卡时,项目列表出现但onClick不起作用。但是,当我不使用TabActivity时,应用程序工作正常。以下是我的代码。

TabWidget.java

public class InfralineTabWidget extends TabActivity{

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Resources res = getResources(); // Resource object to get Drawables
    TabHost tabHost = (TabHost)getTabHost();  // The activity TabHost
    TabHost.TabSpec spec;  // Resusable TabSpec for each tab
    Intent intent;  // Reusable Intent for each tab

    // Create an Intent to launch an Activity for the tab (to be reused)
    intent = new Intent().setClass(this, TopNewsActivity.class);

    // Initialize a TabSpec for each tab and add it to the TabHost
    spec = tabHost.newTabSpec("topNews").setIndicator("Top News", res.getDrawable(R.drawable.tab_news)).setContent(intent);
    tabHost.addTab(spec);
    }
}

TopNewsActivity.java

public class TopNewsActivity extends ListActivity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listplaceholder);

    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();


    String xml = XMLfunctions.getTopNewsXML();
    Document doc = XMLfunctions.XMLfromString(xml);

    int numResults = XMLfunctions.numResults(doc);

    if((numResults <= 0)){
        Toast.makeText(TopNewsActivity.this, "No Result Found", Toast.LENGTH_LONG).show();  
        finish();
    }

    NodeList nodes = doc.getElementsByTagName("result");

    for (int i = 0; i < nodes.getLength(); i++) {                           
        HashMap<String, String> map = new HashMap<String, String>();    

        Element e = (Element)nodes.item(i);
        map.put("id", XMLfunctions.getValue(e, "id"));
        map.put("title", XMLfunctions.getValue(e, "title"));
        mylist.add(map);            
    }       

    ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main, new String[] { "title"}, new int[] { R.id.item_title});

    setListAdapter(adapter);

    final ListView lv = getListView();
    lv.setTextFilterEnabled(true);  
    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            @SuppressWarnings("unchecked")
            HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);                   
            Intent i = new Intent(view.getContext(), NewsDetails.class);
            i.putExtra("content_id", o.get("id"));
            i.putExtra("title", o.get("title"));
            startActivity(i);

        }
        });
    }
}

main.xml中

android:id="@android:id/tabhost"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<LinearLayout

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:padding="5dp">

    <TabWidget

        android:id="@android:id/tabs"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" />

    <FrameLayout

        android:id="@android:id/tabcontent"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:padding="5dp" />

    <TextView  

            android:id="@+id/item_title"

        android:layout_width="fill_parent" 

        android:layout_height="wrap_content"

        android:textAppearance="?android:attr/textAppearanceMedium"

        android:padding="2dp"

        android:textSize="20dp" />

    <TextView  

        android:id="@+id/item_subtitle"

        android:layout_width="fill_parent" 

        android:layout_height="wrap_content" 

        android:padding="2dp"

        android:textSize="13dp" />

</LinearLayout>

任何人都可以帮助用标签视图运行应用程序

1 个答案:

答案 0 :(得分:2)

您应该使用onListItemClick()而不是onItemClick()

编辑:进一步说明......

您正在使用具有名为onListItemClick(...)

的方法的ListActivity

不要在ListActivity的ListView上调用onSetItemClickListener(...),而只需覆盖onListItemClick(...),如下所示......

public class MyListActivity extends ListActivity {

    // onCreate() etc here

    @Override
    public void onListItemClick(ListView parent, View view, int position, long id) {
        // Handle list item clicks here
    }
}