从ListView启动活动

时间:2011-12-12 13:37:45

标签: android listview android-activity adapter

我的列表包含位于“标题”行下方的八个项目,这些项目都包含在我的应用程序的标签中。根据列表中单击的项目,我无法弄清楚如何更改为活动(或可能是不同的选项卡)。

我目前正在扩展Activity类,不确定这是否是一个问题。我试图在扩展ListActivity类的同时使用onListItemClick;然而,这导致应用程序崩溃。

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

public class Tab2 extends Activity {

    private ListView listView1;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tab2);

        Cinema cinema_data[] = new Cinema[]{
            new Cinema(R.drawable.blue, "Blue Cinema"),
            new Cinema(R.drawable.green, "Green Cinema"),
            new Cinema(R.drawable.purple, "Purple Cinema"),
            new Cinema(R.drawable.red, "Red Cinema"),
            new Cinema(R.drawable.yellow, "Gold Cinema"),
            new Cinema(R.drawable.blue, "Cyan Cinema"),
            new Cinema(R.drawable.green, "Lime Cinema"),
            new Cinema(R.drawable.purple, "Magenta Cinema")
        };

        CinemaAdapter adapter = new CinemaAdapter(this,
                R.layout.listview_item_row, cinema_data);

        listView1 = (ListView)findViewById(R.id.listView1);

        View header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null);
        listView1.addHeaderView(header);

        listView1.setAdapter(adapter);

    }   
}

任何帮助将不胜感激!

编辑

protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        try {
            Intent i = new Intent("android.lab.two.Tab1");
            startActivity(i);
        } catch(Exception e){
            e.printStackTrace();
        }
    }

5 个答案:

答案 0 :(得分:1)

如果OnItemClickListener不起作用,您可以尝试在适配器中设置它:

在适配器中,在getView方法中,您可以将OnClickListener添加到行视图中,如下所示:

public View getView(int arg0, View arg1, ViewGroup arg2) {
//Create the view for your row
    AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
    ViewGroup.LayoutParams.WRAP_CONTENT, 64);
    TextView rowView = new TextView(getApplicationContext());
    rowView.setLayoutParams(lp);
    rowView.setText("your value");
    rowView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           try {
                //Starting a new intent ( here a Dial Activity )
                Intent newIntent = new Intent(Intent.ACTION_DIAL);
                newIntent.setData(Uri.parse("tel:"+value));
                startActivity(newIntent);
            } catch (ActivityNotFoundException e) {
                Log.e("your application", "Dial failed", e);
            }
        }  
    });
}

答案 1 :(得分:0)

您只需在列表视图上设置点击监听器即可。你得到了这个位置并从那里执行你的逻辑。下面的代码可以帮助您入门。我不知道你得到了什么错误,但没有太多可能出错的地方。

    listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            Intent myIntent = new Intent(view.getContext(),
                    NextClass.class);

            startActivity(myIntent);
        }
    });

答案 2 :(得分:0)

  1. 使用TabHost中的setCurrentTab方法根据列表项索引更改选项卡。
  2. 对此活动的火意图本身将其保持在单一的顶级发射模式&amp;然后使用捆绑的数据通过标签主机更改标签。
  3. 我希望这有帮助..

答案 3 :(得分:0)

您无法从TabHost启动活动。你是一个内在阶级。您必须使用NestedClasses。 而不是在onClickListener中启动Intent,尝试记录某些内容,您将看到它将起作用。 Log.d( “LOG”, “消息”);

答案 4 :(得分:0)

如果在选项卡(活动)中设置onListItemClick()方法,则必须使用

protected void onListItemClick(ListView l, View v, int position, long id) 
{
            super.onListItemClick(l, v, position, id);

            Intent i = new Intent(this,tab1.class);
            startActivity(i);           
}

如果设置onListItemClick()方法是在其他类中定义那么你必须使用

protected void onListItemClick(ListView l, View v, int position, long id) 
{
            super.onListItemClick(l, v, position, id);

           Intent i = new Intent(v.getContext(),tab1.class);
           startActivity(i);            
}

如果tab1(活动)是一个主要活动,你必须在tab1(活动)中调用tab2(活动),那么你必须使用这种方式......

protected void onListItemClick(ListView l, View v, int position, long id) 
{
                super.onListItemClick(l, v, position, id);

                System.exit(0);               
}