【问题标题】:List item intent not working in android列表项意图在android中不起作用
【发布时间】:2013-06-21 09:28:34
【问题描述】:

我已经为 listview 制作了一个简单的 android 程序,用于学习目的,因为我已经使用了带有文本和图像的 alistview。现在我想要的是,当我单击列表中的项目时,它应该与该特定项目一起进入下一个活动图片和文字..我已经实现了如下那不起作用请帮助我:

主要

package com.example.androidlistview;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

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

public class MainActivity extends Activity {
     String[] smily = new String[]  {"Angry","Basic","Cool","Cry","Err","Evil","Kiss","Laugh","Shame"
                ,"Toungh","Wink","Wonder"};

        int[] pic =new int[]{
                R.drawable.ic_action_emo_angry,
                R.drawable.ic_action_emo_basic,
                R.drawable.ic_action_emo_cool,
                R.drawable.ic_action_emo_cry,
                R.drawable.ic_action_emo_err,
                R.drawable.ic_action_emo_evil,
                R.drawable.ic_action_emo_kiss,
                R.drawable.ic_action_emo_laugh,
                R.drawable.ic_action_emo_shame,
                R.drawable.ic_action_emo_tongue,
                R.drawable.ic_action_emo_wink,
                R.drawable.ic_action_emo_wonder

        };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

         List<HashMap<String,String>> aList = new ArrayList<HashMap<String,String>>();

            for(int i=0;i<10;i++){
                HashMap<String, String> hm = new HashMap<String,String>();
                hm.put("sml", " " + smily[i]);

                hm.put("pic", Integer.toString(pic[i]) );
                aList.add(hm);
            }
            String[] from = { "pic","sml" };


            int[] to = { R.id.smily,R.id.txt};


            SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), aList, R.layout.list_layout, from, to);

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

            listView.setAdapter(adapter);
            listView.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3) {
                    // TODO Auto-generated method stub
                     Intent intent = new Intent(MainActivity.this,Descripsn.class);
                        String smiley=(String)listView.getSelectedItem();
                        Bundle b =new Bundle();
                        intent.putExtra("smily", smiley);
                        intent.putExtra("image", smily[arg2]);
                        startActivity(intent);
                }

            });


    }



}

desc.java

package com.example.androidlistview;


import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.ImageView;
import android.widget.TextView;

public class Descripsn extends Activity {
TextView tv;
ImageView im;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_descripsn);
        tv=(TextView)findViewById(R.id.textView1);
        im=(ImageView)findViewById(R.id.imagedesc);

        Intent i =getIntent();
        Bundle b=getIntent().getExtras();
        String smily = b.getString("smiley");
        int img = b.getInt(smily);
        tv.setText(smily);
    }


}

日志

06-21 09:44:38.263: I/Choreographer(4029): Skipped 53 frames!  The application may be doing too much work on its main thread.
06-21 09:44:39.523: I/Choreographer(4029): Skipped 58 frames!  The application may be doing too much work on its main thread.
06-21 09:44:48.243: I/Choreographer(4029): Skipped 74 frames!  The application may be doing too much work on its main thread.
06-21 09:44:48.633: I/Choreographer(4029): Skipped 200 frames!  The application may be doing too much work on its main thread.
06-21 09:44:48.853: I/Choreographer(4029): Skipped 46 frames!  The application may be doing too much work on its main thread.
06-21 09:44:49.685: I/Choreographer(4029): Skipped 43 frames!  The application may be doing too much work on its main thread.
06-21 09:44:54.079: I/Choreographer(4029): Skipped 44 frames!  The application may be doing too much work on its main thread.
06-21 09:44:54.733: I/Choreographer(4029): Skipped 46 frames!  The application may be doing too much work on its main thread.

【问题讨论】:

  • 不工作意味着没有按意图在下一个活动中获取文本
  • 是的......文本和图像也没有进入下一个活动......!

标签: android android-intent android-listview


【解决方案1】:

试试这个

 @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {

                 Intent intent = new Intent(MainActivity.this,Descripsn.class);

                    intent.putExtra("smily", smily[arg2].toString());
                    intent.putExtra("image", pic[arg2]);
                    intent.putExtra("pos", arg2);
                    startActivity(intent);
            }

参加其他活动

Bundle b=getIntent().getExtras();
    String smily = b.getString("smily");
    int img = b.getInt("image");
    int imgpos = b.getInt("pos");

【讨论】:

    【解决方案2】:

    在您的 Descriptsn 类中,您必须为 getExtras 使用相同的标识符。

    像这样尝试..

    Intent i =getIntent();
            Bundle b=getIntent().getExtras();
            String smily = b.getString("smily");
            String img = b.getString("image");
            tv.setText(smily);
    

    编辑:- 您将根据需要获得传递的文本..但是对于图像,您可以将选定的列表位置作为标识符发送到您的下一个意图,如下所示..

     @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1,
                            int arg2, long arg3) {
                        // TODO Auto-generated method stub
                         Intent intent = new Intent(MainActivity.this,Descripsn.class);
                            String smiley=(String)listView.getSelectedItem();
                            Bundle b =new Bundle();
                            intent.putExtra("smily", smiley);
                            intent.putExtra("image", smily[arg2]);
                            intent.putExtra("pos", arg2);
                            startActivity(intent);
                    }
    

    然后得到这样的额外,

    Intent i =getIntent();
                Bundle b=getIntent().getExtras();
                String smily = b.getString("smily");
                String img = b.getString("image");
                int imgpos = b.getInt("pos");
                tv.setText(smily);
    

    【讨论】:

    • 编辑了帖子.. 如果您仍然面临问题,请尝试添加 Log 以打印您在 getExtras 之后获得的值..
    【解决方案3】:
    String smily = b.getString("smiley");
    

    错误))

    试试这个:

    String smily = b.getString("smily");
    

    【讨论】:

      【解决方案4】:

      ma​​in.java
      包 com.example.androidlistview;

      import java.util.ArrayList;
      import java.util.HashMap;
      import java.util.List;
      
      import android.app.Activity;
      import android.content.Intent;
      import android.os.Bundle;
      import android.view.View;
      import android.widget.AdapterView;
      import android.widget.AdapterView.OnItemClickListener;
      import android.widget.ListView;
      import android.widget.SimpleAdapter;
      import android.widget.TextView;
      
      public class MainActivity extends Activity {
           String[] smily = new String[]  {"Angry","Basic","Cool","Cry","Err","Evil","Kiss","Laugh","Shame"
                      ,"Toungh","Wink","Wonder"};
      
              public int[] pic =new int[]{
                      R.drawable.ic_action_emo_angry,
                      R.drawable.ic_action_emo_basic,
                      R.drawable.ic_action_emo_cool,
                      R.drawable.ic_action_emo_cry,
                      R.drawable.ic_action_emo_err,
                      R.drawable.ic_action_emo_evil,
                      R.drawable.ic_action_emo_kiss,
                      R.drawable.ic_action_emo_laugh,
                      R.drawable.ic_action_emo_shame,
                      R.drawable.ic_action_emo_tongue,
                      R.drawable.ic_action_emo_wink,
                      R.drawable.ic_action_emo_wonder
      
              };
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
               List<HashMap<String,String>> aList = new ArrayList<HashMap<String,String>>();
      
                  for(int i=0;i<10;i++){
                      HashMap<String, String> hm = new HashMap<String,String>();
                      hm.put("sml", " " + smily[i]);
      
                      hm.put("pic", Integer.toString(pic[i]) );
                      aList.add(hm);
                  }
                  String[] from = { "pic","sml" };
      
      
                  int[] to = { R.id.smily,R.id.txt};
      
      
                  SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), aList, R.layout.list_layout, from, to);
      
                  final ListView listView = ( ListView ) findViewById(R.id.listView1);
      
                  listView.setAdapter(adapter);
                  listView.setOnItemClickListener(new OnItemClickListener() {
      
                      @Override
                      public void onItemClick(AdapterView<?> arg0, View arg1,
                              int arg2, long arg3) {
                          // TODO Auto-generated method stub
                          Intent intent = new Intent(MainActivity.this,Descripsn.class);
                          Bundle b =new Bundle();
                          intent.putExtra("smily", smily[arg2]);
                          intent.putExtra("image", pic[arg2]);
                          startActivity(intent);
                      }
      
                  });
      
      
          }
      
      
      
      }
      

      desc.jav

      package com.example.androidlistview;
      
      
      import android.os.Bundle;
      import android.app.Activity;
      import android.content.Intent;
      import android.view.Menu;
      import android.widget.ImageView;
      import android.widget.TextView;
      
      public class Descripsn extends Activity {
      TextView tv;
      ImageView im;
      private MainActivity main = new MainActivity();
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_descripsn);
              tv=(TextView)findViewById(R.id.textView1);
              im=(ImageView)findViewById(R.id.imagedesc);
      
              Intent i =getIntent();
              Bundle b=  getIntent().getExtras();
              String smily = b.getString("smily");
             int img = b.getInt("image");
              String imgpos = b.getString("pos");
      
              System.out.println("Image value"+img);
      
              //System.out.println("======Posi::::::"+smily);
      
             tv.setText(smily);
             im.setBackgroundResource(img);
          }
      
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-19
        • 2021-04-18
        • 1970-01-01
        • 2011-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-09
        相关资源
        最近更新 更多