【问题标题】:Starting an Activity from ListView从 ListView 启动 Activity
【发布时间】:2012-01-18 11:56:51
【问题描述】:

我的列表包括位于“标题”行下方的八个项目,所有项目都包含在我的应用程序的 选项卡 中。我不知道如何根据在列表中单击的项目更改为活动(或可能是不同的选项卡)。

我目前正在扩展 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();
        }
    }

【问题讨论】:

  • 您在哪里编写 onListItemClick 事件代码将该代码粘贴到此处
  • 所以你想在你的标签中开始你的活动?它是在当前的列表视图选项卡中还是在不同的选项卡中?
  • 我主要想知道如何从这个标签和列表中开始任何活动。或者至少检测到用户点击了一个项目。
  • 另外,你能在应用程序崩溃时发布错误吗?你的问题很模糊,我们不知道真正的问题是什么......
  • 错误信息也很模糊; “不幸的是 已停止工作” - 奇怪的是,只有当我单击包含列表的选项卡时才会发生这种情况。

标签: android listview android-activity adapter


【解决方案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);
            }
        }  
    });
}

【讨论】:

  • “当我尝试在我的 CinemaAdapter 类中设置 onClickListener 时,类型 new View.OnClickListener(){} 的方法 startActivity(Intent) 未定义”
  • 我已经在我的 Activity 类中定义了我的 Adapter 类,因此它可以访问 Activity 的方法。如果您单独定义它,则需要获取对您的活动的引用才能调用myActivity.startActivity(myIntent);
  • 对不起,我的适配器类扩展了 ArrayAdapater,这就是为什么我猜我不能使用 startActivity(),你能详细说明我将如何解决这个问题吗?谢谢。
  • 查看this question 了解如何从适配器启动活动。
  • 好的。我现在似乎能够登录 indv。项目点击,只是试图从这个 atm 开始一个活动......
【解决方案2】:

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

    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);
        }
    });

【讨论】:

  • 我需要扩展 ListActivity 以使用此方法,不知道为什么,但是当我单击包含列表的选项卡时,我得到:“不幸的是 已停止工作”
  • 你可以使用 logcat 获取堆栈跟踪吗?
  • 是的,从我尝试扩展 ListActivity 开始...我应该在哪里上传信息?
【解决方案3】:
  1. 使用 TabHost 中的 setCurrentTab 方法根据列表项索引更改选项卡。
  2. 触发此活动本身的意图,使其保持在单一顶部启动模式,然后使用捆绑的数据通过选项卡主机更改选项卡。

我希望这会有所帮助..

【讨论】:

  • 感谢您的帮助,但我什至无法“倾听”用户与列表 atm 的交互。
  • 你想通过意图改变标签的内容吗?
  • 我想通过单击列表中的一项来开始一个新的活动。
  • 如果您使用的是 onItemClickListener,这应该不难。一个建议是在父类而不是嵌套类中定义点击监听器。
【解决方案4】:

您不能从 TabHost 启动活动。你在一个内部班级。您必须使用 NestedClasses。 不要在 onClickListener 中启动 Intent,而是尝试记录一些内容,您会发现它会起作用。 Log.d("LOG","消息");

【讨论】:

  • 在 onItemClickListener 中记录。请删除“Intent myIntent = new Intent(view.getContext(), NextClass.class);”,然后输入一条日志消息,您将在 LogCat 中看到它。你不会得到任何错误
  • 似乎无法添加 onItemClickListener:“AdapterView 类型中的方法 setOnItemClickListener(AdapterView.OnItemClickListener) 不适用于参数(新的 OnItemClickListener(){})”
  • protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id);尝试 { Intent i = new Intent("android.lab.two.Tab1");开始活动(一); } 捕捉(异常 e){ e.printStackTrace(); } }你有这个函数是你写的。替换意图 i = new Intent("android.lab.two.Tab1");开始活动(一);与 Log.d("LOG","Message");
  • void 显然是无效的返回类型?
  • 我不明白你的意思?告诉我你是否替换了代码,以及它是否有效。如果您删除 Intent 事物,那么您的应用程序将不会崩溃...如果您告诉我该应用程序不再崩溃,我会告诉您如何进一步从您的列表中启动活动
【解决方案5】:

如果您在选项卡(活动)中设置 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(activity) 是主要活动,并且您必须在 tab1(activity) 中调用 tab2(activity),那么您必须使用这种方式...

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

                System.exit(0);               
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多