如何设置OnClickListener以使用适配器为ArrayList打开新活动(或页面)?

时间:2014-05-21 16:02:04

标签: java android arraylist adapter onclicklistener

我试图让一个人点击它们后,让数组中的每个项目打开一个页面。

我已经搜遍过,但没有任何作用,似乎没有回答我的具体答案。这是我的代码:


 package com.projectexe;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.SimpleAdapter;

public class MainActivity extends ListActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate ( savedInstanceState ) ; 

         ArrayList<Map<String, String>> list = buildData();
            String[] from = { "article", "description" };
          int[] to = { android.R.id.text1, android.R.id.text2 };

            SimpleAdapter adapter = new SimpleAdapter(this, list,
            android.R.layout.simple_list_item_2, from, to);
            setListAdapter(adapter);            

    }



     private ArrayList<Map<String, String>> buildData() {
            ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();
            list.add(putData("Article 1", "Description 1: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce nunc tellus, laoreet eu felis quis, hendrerit tincidunt turpis. Donec semper consequat erat, vel ornare odio tempus sed. Mauris sollicitudin libero dui, nec dignissim dolor tincidunt sit amet. Duis gravida lorem sed vestibulum vulputate. Etiam varius scelerisque vehicula."));
            list.add(putData("Article 2", "Description 2: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce nunc tellus, laoreet eu felis quis, hendrerit tincidunt turpis. Donec semper consequat erat, vel ornare odio tempus sed. Mauris sollicitudin libero dui, nec dignissim dolor tincidunt sit amet. Duis gravida lorem sed vestibulum vulputate. Etiam varius scelerisque vehicula."));
            list.add(putData("Article 3", "Description 3: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce nunc tellus, laoreet eu felis quis, hendrerit tincidunt turpis. Donec semper consequat erat, vel ornare odio tempus sed. Mauris sollicitudin libero dui, nec dignissim dolor tincidunt sit amet. Duis gravida lorem sed vestibulum vulputate. Etiam varius scelerisque vehicula."));
            return list;


          }


          private HashMap<String, String> putData(String article, String description) {
            HashMap<String, String> item = new HashMap<String, String>();
            item.put("article", article);
            item.put("description", description);
            return item;
          }

                public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                    // Do something in response to the click

                     Intent intent1 = new Intent(this, DisplayMainActivity.class);
                       startActivity(intent1);             

                }
            }

package com.projectexe;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

public class DisplayMainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_display_main);
          // Get the message from the intent


        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment()).commit();
        }
    }

        @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_display_main,
                    container, false);
            return rootView;
        }
    }

}

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="false"
    tools:context="com.projectexe.DisplayMainActivity"
    tools:ignore="MergeRootFrame" >



</FrameLayout>

控制台:

[2014-05-21 12:16:49 - ProjectExe] ------------------------------
[2014-05-21 12:16:49 - ProjectExe] Android Launch!
[2014-05-21 12:16:49 - ProjectExe] adb is running normally.
[2014-05-21 12:16:49 - ProjectExe] Performing com.projectexe.MainActivity activity launch
[2014-05-21 12:16:54 - ProjectExe] Launch canceled!
[2014-05-21 12:22:42 - ProjectExe] Dx 
trouble writing output: already prepared
[2014-05-21 12:22:45 - ProjectExe] ------------------------------
[2014-05-21 12:22:45 - ProjectExe] Android Launch!
[2014-05-21 12:22:45 - ProjectExe] adb is running normally.
[2014-05-21 12:22:45 - ProjectExe] Performing com.projectexe.MainActivity activity launch
[2014-05-21 12:22:49 - ProjectExe] ------------------------------
[2014-05-21 12:22:49 - ProjectExe] Android Launch!
[2014-05-21 12:22:49 - ProjectExe] adb is running normally.
[2014-05-21 12:22:49 - ProjectExe] Performing com.projectexe.MainActivity activity launch
[2014-05-21 12:22:54 - ProjectExe] Launch canceled!
[2014-05-21 12:22:56 - ProjectExe] Launch canceled!
[2014-05-21 12:41:17 - ProjectExe] Dx 
trouble writing output: already prepared
[2014-05-21 12:41:19 - ProjectExe] ------------------------------
[2014-05-21 12:41:19 - ProjectExe] Android Launch!
[2014-05-21 12:41:19 - ProjectExe] adb is running normally.
[2014-05-21 12:41:19 - ProjectExe] Performing com.projectexe.MainActivity activity launch
[2014-05-21 12:41:26 - ProjectExe] Launch canceled!

触摸clickListener时,我希望它使用意图来启动新活动。如果我添加代码,说OnClickListener,我添加意图 - 我的应用程序崩溃。最后一次,我只是尝试添加吐司,它显示了listview,但是当我点击第一个项目时它就崩溃了。我不想要祝酒,我只是想让它去一个新的页面或活动。

2 个答案:

答案 0 :(得分:0)

你没有添加任何带有异常的日志cat,也没有添加有问题的onClickListener代码,所以我不能完全确定你的应用程序崩溃的原因(可能是不正确的意图等),但我想你正在尝试将点击监听器添加到列表视图,您需要的是OnItemClickListener而不是

修改

public class MainActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate ( savedInstanceState ); 
    setContentView(R.layout.my_layout);
    ListView listView = (ListView) findViewById(R.id.my_list_view);
    ArrayList<Map<String, String>> list = buildData();
    String[] from = { "article", "description" };
    int[] to = { android.R.id.text1, android.R.id.text2 };
    SimpleAdapter adapter = new SimpleAdapter(this, list,
    android.R.layout.simple_list_item_2, from, to);
    listView.setAdapter(adapter);            
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent1 = new Intent(MainActivity.this, DisplayMainActivity.class);
            MainActivity.this.startActivity(intent1);
        }
    });
}

答案 1 :(得分:0)

您需要使用OnItemClickListener。它可以帮助您针对特定项目点击执行操作。