2010-08-03 5 views
0

나는 ListView에서 느린 이미지로드를 생성합니다. 에서 자습서를 따라 갔는데 Stack Overflow 성공적으로 실행되었습니다.OnItemClickListener 문제

하지만 코드와 함께 프로젝트에 참여하면 문제가 발생합니다. 이 프로그램은 아니오 OnItemClickListener :(

내 프로젝트는 TabHost이 수행되지 않았으며 그것은 5 개 탭의 내용을 가지고이 개 내용이 ListActivity를 사용하여 완벽하게 실행 여기

내 코드입니다 Main.java를 :..

public class ProductListing extends Activity { 
ListView list; 
MyListAdapter adapter; 
Controller c; 
ImageLoader imageLoader; 
TextView select; 

//========== JSON =========== 
ArrayList<String> strName = new ArrayList<String>(); 
ArrayList<String> strImage = new ArrayList<String>(); 
ArrayList<String> strDesc = new ArrayList<String>(); 
ArrayList<String> strSize = new ArrayList<String>(); 
JSONObject jsonObject; 
String[] listItem; 
Context context; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      LoadJSON(); 
      setContentView(R.layout.productlisting_tab); 
      list=(ListView)findViewById(R.id.ListView01); 
      c = new Controller(this); 
      adapter=new MyListAdapter(this,this, strName, strImage,strDesc,strSize); 
      list.setAdapter(adapter); 
      list.setOnItemClickListener(new OnItemClickListener(){ 
     @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 
     // TODO Auto-generated method stub 
     System.out.println("Item Clicked"); 
    } 
     }); 


    } 

    public void LoadJSON(){ 
     try { 
      InputStream is = this.getResources().openRawResource(R.raw.premium); 
      byte[] buffer; 
      buffer = new byte[is.available()]; 
      while(is.read(buffer) != -1); 
      String jsonText = new String(buffer); 

      jsonObject = new JSONObject(jsonText); 
      JSONObject premium_tab = jsonObject.getJSONObject("premium_tab");    

      int totalItem = premium_tab.getInt(".total"); 
      for (int i = 1; i <= totalItem; i++) { 
       JSONObject premium = premium_tab.getJSONObject("premium_"+i); 
       String tempName =premium.getString(".name").toString(); 
       String tempImg = premium.getString(".image").toString(); 
       String tempDesc = premium.getString(".desc").toString(); 
       String tempSize = premium.getString(".size").toString(); 
       strName.add(tempName); 
       strImage.add(tempImg); 
       strDesc.add(tempDesc); 
       strSize.add(tempSize); 
      } 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
    } 

MyListAdapter.java :.

public MyListAdapter(Context b,Activity a, ArrayList<String> strName, ArrayList<String> strImage, 
      ArrayList<String> strDesc, ArrayList<String> strSize) { 
    activity = a; 
    name = strName; 
    image = strImage; 
    desc = strDesc; 
    size = strSize;   
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    imageLoader=new ImageLoader(activity.getApplicationContext()); 
} 

public int getCount() { 
    return image.size(); 
} 

public Object getItem(int position) { 
    return position; 
} 

public long getItemId(int position) { 
    return position; 
} 

public static class ViewHolder{ 
    public TextView ProductName,ProductSize, ProductDesc; 
    public ImageView ProductIcon; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi=convertView; 
    ViewHolder holder; 
    if(convertView==null){ 
     vi = inflater.inflate(R.layout.productlisting, null); 
     holder=new ViewHolder(); 
     holder.ProductName=(TextView)vi.findViewById(R.id.text); 
     holder.ProductIcon=(ImageView)vi.findViewById(R.id.image); 
     holder.ProductDesc=(TextView)vi.findViewById(R.id.textdesc); 
     holder.ProductSize=(TextView)vi.findViewById(R.id.textsize); 
     vi.setTag(holder); 
    } 
    else 
     holder=(ViewHolder)vi.getTag(); 

    holder.ProductName.setText(name.get(position)); 
    holder.ProductDesc.setText(desc.get(position)); 
    holder.ProductIcon.setTag(image.get(position)); 
    holder.ProductSize.setText(size.get(position)); 
    imageLoader.DisplayImage(image.get(position), activity, holder.ProductIcon); 
    return vi; 
    }  
} 

이름 ImageLoader.java 위의 소스 링크를 참조하시기 바랍니다 또 다른 클래스 내 실수가 어디 있는지 알 수 있을까요? 내 코드가 매우 못생긴 것을 이해하고, 나는 안드로이드에서 새로운 문제를 해결하도록 도와주세요. 며칠 동안 나를 찔렀다. 귀하의 회신은 대단히 감사합니다 !!!

P/S : 나쁜 영어에 대해 유감스럽게 생각하며, 내가 무슨 말을하는지 이해하길 바랍니다. 감사합니다.

시선 Wynix는

+0

"itemClick does not work"를 잘 설명 할 수 있습니까? logcat에 오류가 있습니까? 정기적 인 간격으로 로그를 추가하여 디버깅을 시도하여 작동하지 않는 부분을 찾으십니까? – Sephy

+0

어댑터가 조금 이상하다고 생각하지 않습니까? 그것은 심지어 안드로이드 프레임 워크에서 어댑터 클래스를 확장하지 않습니다 ... – Sephy

+0

안녕 Sephy 답장을 보내 주셔서 감사합니다, 나는 logcat에 아무런 오류가 없으며 "System.out.println ("Item Click! ")"OnItemClickListener() 함수를 호출합니다. 그러나 logcat는 어떤 한 단어도 출력하지 못했습니다. 어댑터에 대해서, 그것은 BaseAdapter를 확장했습니다, 미안 해요. 몇 줄의 사본을 놓치세요 .. – WynixToo

답변

0

저는 문제를 해결하고 해결했습니다. erroe는 xml 파일에 있습니다. ListView에 없습니다

android:focusable="true"; menthod 없습니다.

어쨌든 내 문제를 해결해 주셔서 감사합니다. 다시 한번 감사드립니다. 건배!

Regard Wynix

0

나는 이벤트 리스너를 추가하는 다른 기술을 사용합니다. 한 OnCreate 메소드에서 나는 btnAdd.setOnClickListener(onAdd);를 작성하고 독립형 방법을 추가하는 것은이 같은 이벤트에 훅하기 :

private View.OnClickListener onAdd=new View.OnClickListener() { 
    public void onClick(View v) { 
     // your code here 
    } 
}; 

이 코드에서 오류를 검색하기가 쉬워집니다.

코드에서 개별 항목 대신 이벤트 수신기를 전체 목록으로 설정했습니다. 어쩌면 개별 항목에 이벤트를 추가해야합니까?

+0

안녕하세요 BennySkogberg, 답장을 보내 주셔서 감사합니다. 죄송합니다. 아직 안드로이드에 새로 왔습니다. 개별 항목에 이벤트를 추가하는 것이 무슨 뜻인지 잘 모르겠습니다. 내가 listview에있는 모든 항목에 이벤트를 추가해야한다는 것을 의미합니까? 나는 나쁜 영어에 대해 유감스럽게 생각하며, 내가 무슨 말을하는지 이해하기를 바랍니다.감사합니다 – WynixToo

+0

당신의 영어에 대해 사과 할 필요가 없습니다, 나는 당신을 완벽하게 이해합니다. 당신은 저를 정확하게 이해했습니다 - 모든 항목은 개별 사건 처리자에 연결되어야합니다. 처음에 원하는대로 작업하게되면 나머지 항목을 쉽게 작동시킬 수 있습니다. –

+0

답장을 보내 주셔서 다시 한 번 감사드립니다. 하지만 목록 스타일로 항목을 만들고 있어요. 각 항목에 이벤트를 추가하는 방법은 무엇입니까? 해당 항목은 ArrayList 유형입니다. "list.setadapter (새로운 ArrayList를 (이, R.layout.productlisting, strName.get (1));"? 이 항목에 이벤트를 추가하는 방법이 아니다거나 다른 방법이 있었다 저를위한 몇몇보기는 이해하기 쉬울 것입니다. – WynixToo