【问题标题】:Listview get back object on click eventListview在点击事件上取回对象
【发布时间】:2014-02-23 10:56:29
【问题描述】:

我试图在列表视图上的“OnClick”事件中取回一个对象(在我的情况下它是一个墙纸对象),我试图通过两种方式来管理它,但每次我得到:“@987654322 @"。

第一个解决方案:Wallpaper obj = (Wallpaper) listV.getItemAtPosition(position);

第二个解决方案:Wallpaper obj = (Wallpaper ) adapter.getItem(position);

我在 MainActivity 中的代码:

    ListView listV = null;
    LazyAdapter adapter;

    public final static String EXTRA_MESSAGE = "com.project.samplelist.MESSAGE";
    public String message = null;
    public Wallpaper wallpaperMessage = null;

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

        final JsonDownloaderTask task = new JsonDownloaderTask(this);
        task.execute(url); //download json data and set to wallpaper object and set Lazyadapter

        listV = (ListView) findViewById(R.id.list);
        /*adapter = new LazyAdapter(this, wallpList);        
        listV.setAdapter(adapter);*/

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

                Wallpaper obj = (Wallpaper) listV.getItemAtPosition(position); // get wallpaper object on click
                message = obj.getFullscreen(); // create message
                wallpaperMessage = obj;

                Intent wallpaperFullScreenActivity = new Intent(MainActivity.this, FullscreenActivity.class);
                wallpaperFullScreenActivity.putExtra(EXTRA_MESSAGE, message); 
                wallpaperFullScreenActivity.putExtra("id", obj.getId());

                startActivity(wallpaperFullScreenActivity);             
            }
        });
    }

在我的其他一个项目中,我使用了第一个解决方案,并且效果很好。我看不出有什么区别。。

编辑:

我的任务中设置的适配器已完成:

public void jsonTaskComplete(JSONArray data)
    {
        ArrayList<Wallpaper> wallpapersList = new ArrayList<Wallpaper>();

        Wallpaper w = null;

        String id = "";
        String preview = "";
        String fullscreen = "";
        String tags = "";
        String size = "";

        try {

            for(int indexData = 0; indexData < data.length(); indexData++)
            {
                w = new Wallpaper();            

                // Fetching data
                id = data.getJSONObject(indexData).getString("id");
                preview = data.getJSONObject(indexData).getString("preview");
                fullscreen = data.getJSONObject(indexData).getString("fullscreen");             
                tags = data.getJSONObject(indexData).getString("tags");
                size = data.getJSONObject(indexData).getString("size");

                // Setting data
                w.setId(id);
                w.setPreview(preview);
                w.setFullscreen(fullscreen);
                w.setSize(size);                
                w.setTags(tags);

                // Adding result as a wallpaper object in the list
                wallpapersList.add(w);                  
            }           

        } catch (JSONException e) {
            e.printStackTrace();
        }
        listV.setAdapter(new LazyAdapter(this, wallpapersList));
    }

编辑:

我没有任何堆栈跟踪.. 只是我在同一行在调试模式下按了 F6 两次:Wallpaper obj = (Wallpaper) listV.getItemAtPosition(position);

我得到了 InvocationTargetException.class(找不到源)和这个:

//Compiled from InvocationTargetException.java (version 1.5 : 49.0, super bit)
public class java.lang.reflect.InvocationTargetException extends java.lang.ReflectiveOperationException {

  // Method descriptor #8 ()V
  // Stack: 3, Locals: 1
  protected InvocationTargetException();
     0  aload_0 [this]
     1  invokespecial java.lang.ReflectiveOperationException() [1]
     4  new java.lang.RuntimeException [2]
     7  dup
     8  ldc <String "Stub!"> [3]
    10  invokespecial java.lang.RuntimeException(java.lang.String) [4]
    13  athrow
      Line numbers:
        [pc: 0, line: 5]
      Local variable table:
        [pc: 0, pc: 14] local: this index: 0 type: java.lang.reflect.InvocationTargetException

  // Method descriptor #14 (Ljava/lang/Throwable;)V
  // Stack: 3, Locals: 2
  public InvocationTargetException(java.lang.Throwable exception);
     0  aload_0 [this]
     1  invokespecial java.lang.ReflectiveOperationException() [1]
     4  new java.lang.RuntimeException [2]
     7  dup
     8  ldc <String "Stub!"> [3]
    10  invokespecial java.lang.RuntimeException(java.lang.String) [4]
    13  athrow
      Line numbers:
        [pc: 0, line: 6]
      Local variable table:
        [pc: 0, pc: 14] local: this index: 0 type: java.lang.reflect.InvocationTargetException
        [pc: 0, pc: 14] local: exception index: 1 type: java.lang.Throwable

  // Method descriptor #17 (Ljava/lang/Throwable;Ljava/lang/String;)V
  // Stack: 3, Locals: 3
  public InvocationTargetException(java.lang.Throwable exception, java.lang.String detailMessage);
     0  aload_0 [this]
     1  invokespecial java.lang.ReflectiveOperationException() [1]
     4  new java.lang.RuntimeException [2]
     7  dup
     8  ldc <String "Stub!"> [3]
    10  invokespecial java.lang.RuntimeException(java.lang.String) [4]
    13  athrow
      Line numbers:
        [pc: 0, line: 7]
      Local variable table:
        [pc: 0, pc: 14] local: this index: 0 type: java.lang.reflect.InvocationTargetException
        [pc: 0, pc: 14] local: exception index: 1 type: java.lang.Throwable
        [pc: 0, pc: 14] local: detailMessage index: 2 type: java.lang.String

  // Method descriptor #21 ()Ljava/lang/Throwable;
  // Stack: 3, Locals: 1
  public java.lang.Throwable getTargetException();
     0  new java.lang.RuntimeException [2]
     3  dup
     4  ldc <String "Stub!"> [3]
     6  invokespecial java.lang.RuntimeException(java.lang.String) [4]
     9  athrow
      Line numbers:
        [pc: 0, line: 8]
      Local variable table:
        [pc: 0, pc: 10] local: this index: 0 type: java.lang.reflect.InvocationTargetException

  // Method descriptor #21 ()Ljava/lang/Throwable;
  // Stack: 3, Locals: 1
  public java.lang.Throwable getCause();
     0  new java.lang.RuntimeException [2]
     3  dup
     4  ldc <String "Stub!"> [3]
     6  invokespecial java.lang.RuntimeException(java.lang.String) [4]
     9  athrow
      Line numbers:
        [pc: 0, line: 9]
      Local variable table:
        [pc: 0, pc: 10] local: this index: 0 type: java.lang.reflect.InvocationTargetException
}

【问题讨论】:

  • 您没有设置任何适配器。显然 getItemAtPosition 在这里不起作用。
  • 我在我的 task.execut(url) 中管理这个,正如我在这一行的评论中所说的那样。最后完成我的任务:listV.setAdapter(new LazyAdapter(this, wallpapersList));
  • 发布完整的堆栈跟踪
  • 你的 Logcat 说你的 AndroidHttpClient 有问题。见链接解决:stackoverflow.com/questions/9393426/…
  • @aegean 是的,对不起,我刚刚在您回答之前修复了它,现在我没有错误..

标签: android listview


【解决方案1】:

将您的这一行从JsonTaskComplete 移动到类级别以使其成为类字段:

ArrayList<Wallpaper> wallpapersList = new ArrayList<Wallpaper>();

现在执行此操作以获取OnItemClickListener 中的壁纸

Wallpaper obj =  wallpapersList.get(position); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多