2013-02-28 3 views
1

는 할이 됐나요?어댑터 목록보기 항목 클릭 이벤트

@Override 
protected void onPostExecute(final ChannelPair p) { 
    HiddenChannelsListAdapter adapter = new HiddenChannelsListAdapter(p.ctx, p.channelList); 
    p.lv.setAdapter(adapter); 
    p.lv.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
      Log.i("CLICKED ON LV ITEM", "YEA"); 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 
} 

실제로 이벤트가 발생하지 않는다고 생각합니다. 적어도 항목이 선택되지 않았습니까?

UPDATE는 그래서 모두 같은 파일에 이제 그는 AsyncTask를에서 물건을 제거하고 새로운 스레드에 추가. 하지만 여전히, 나는 클릭이 연결되어이 제품은 항목

package com.example.tvrplayer; 

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

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.preference.DialogPreference; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListView; 

public class ChannelsDialogPreference extends DialogPreference { 

    public static Context ctx; 
// Activity activity; 

    public ChannelsDialogPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     this.ctx = context; 
    } 


    @Override 
    protected View onCreateDialogView() { 

//  Set loading spinner 

//  Start looking for channels 

//  When complete, show channels 





     LayoutInflater inflater = ((SettingsActivity) ctx).getLayoutInflater(); 
     final View vw = inflater.inflate(R.layout.channel_content_view, null); 
//  Do this in a new Thread 


     Thread thread = new Thread() 
     { 
      @Override 
      public void run() { 
       try { 
        final JSONArray channels; 
        String username = null; 
        String linkid = null; 
        final String apiurl = "http://192.168.2.136:8080"; 
        final String channelID = null; 
        final DatabaseHandler db = new DatabaseHandler(ctx); 
        List<User> users = db.getAllUsers(); 
        for (User cn : users) { 
         linkid = cn.getLinkID(); 
         username = cn.getUserName(); 
        } 
        db.close(); 

        final ArrayList< HashMap < String, String > > channelList = new ArrayList < HashMap < String, String > >(); 
        try { 

         if (channelID != null) { 
          channels = Json.getJson(apiurl + "/rest/channel/"+ linkid +"/"+ username + "/" + channelID, "GET"); 
          Log.i("CHANNELS", channels.toString()); 
          for (int i=0; i < channels.length(); i++) { 
           JSONObject json_data = channels.getJSONObject(i); 
           String name = json_data.getString("Name"); 
           String channelid = json_data.getString("ChannelID"); 
           HashMap<String, String> channelObject = new HashMap<String, String>(); 
//         if (json_data.getString("ParentPath") == "") { 
           channelObject.put("id", channelid); 
           channelObject.put("name", name); 
           channelList.add(channelObject); 
//         } 
          } 
         } else { 
          channels = Json.getJson(apiurl + "/rest/channel/"+ linkid +"/"+ username, "GET"); 
          Log.i("CHANNELS", channels.toString()); 
          for (int i=0; i < channels.length(); i++) { 
           JSONObject json_data = channels.getJSONObject(i); 
           String name = json_data.getString("Name"); 
           String channelid = json_data.getString("ChannelID"); 
           HashMap<String, String> channelObject = new HashMap<String, String>(); 
           Log.i("CHANNEL LEN", ""+ json_data.getString("ParentID").length()); 
           if (json_data.getString("ParentID").length() < 32) { 
            channelObject.put("id", channelid); 
            channelObject.put("name", name); 
            channelList.add(channelObject); 
           } 
          } 
         } 
         ((Activity)ctx).runOnUiThread(new Runnable() { 
          public void run() { 
           HiddenChannelsListAdapter adapter = new HiddenChannelsListAdapter(ctx, channelList); 
            ListView lv = (ListView) vw.findViewById(R.id.list); 
            lv.setAdapter(adapter); 
            lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() 
            { 
             @Override 
             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) 
             { 
              Log.i("CLICKED ON LV ITEM", "YEA"); 
             } 
            }); 
          } 
         }); 

        } catch (JSONException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        }        
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 

     thread.start(); 
     return vw; 
    } 

    @Override 
    protected void onDialogClosed(boolean positiveResult) { 
     super.onDialogClosed(positiveResult); 
     persistBoolean(positiveResult); 
    } 

    @Override 
    public void onClick (DialogInterface dialog, int which) 
    { 
     super.onClick(dialog, which); 
// 
     Log.v("which", Integer.toString(which)); 
// 
     if(which == -1) { //Clear all 
//   new ChannelHandler().execute(apiurl, username, linkid, vw, ctx, channelID); 
     } 
    } 


} 

에서 클릭을 얻을 수 없습니다

((Activity)ctx).runOnUiThread(new Runnable() { 
          public void run() { 
           HiddenChannelsListAdapter adapter = new HiddenChannelsListAdapter(ctx, channelList); 
            ListView lv = (ListView) vw.findViewById(R.id.list); 
            lv.setAdapter(adapter); 
            lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() 
            { 
             @Override 
             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) 
             { 
              Log.i("CLICKED ON LV ITEM", "YEA"); 
             } 
            }); 
          } 
         }); 

답변

1

이것은 백그라운드 스레드에서 호출 할 수 없습니다 UIthread에 변화를 야기한다. Remeber 업데이트하거나를 backgound 스레드

+0

임 내가 그렇지 않으면이 작업을 수행 할 방법을 잘에서 notifychange()listView합니다 않았다. 나는 어댑터에 (웹에서) 항목을 추가하기 전에로드 웹 URL에서 목록을 기다려야한다. – Harry

+0

은 AsyncTask를 외부에 같은 코드를 작성합니다. OnCreate() 메서드에 씁니다. –

+0

그래서 AsynTask를 꺼내나요? 이 부품이 아닌 – Harry

관련 문제