OnItemClickListener Проблема - PullRequest
       2

OnItemClickListener Проблема

0 голосов
/ 03 августа 2010

Я создаю ленивую загрузку изображения в ListView. За мной следовал учебник из этого источника , который я нашел в Переполнение стека Это было успешно выполнено.

Но когда я присоединяюсь к коду вместе с моим проектом, тогда я сталкиваюсь с проблемой. программа не выполняла OnItemClickListener: (

В моем проекте есть TabHost, и в нем было 5 вкладок. 2 содержимое использует 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, пожалуйста, обратитесь к исходной ссылке выше. Могу ли я знать, где моя ошибка? я понимаю, мой код будет очень уродливым, я новичок в Android, пожалуйста, помогите мне решить эту проблему. это застряло у меня на несколько дней. Ваш ответ очень ценится !!!

P / S: Извините за мой плохой английский, надеюсь, вы, ребята, понимаете, о чем я говорю. Спасибо.

Regard Wynix

Ответы [ 2 ]

0 голосов
/ 05 августа 2010

Я решил проблему и решил ее.ошибка находится в файле XML.в ListView НЕ ДОЛЖНО иметь

android:focusable="true"; menthod.

в любом случае Спасибо за попытку решить мою проблему.Еще раз спасибо.Ура!

Regard Wynix

0 голосов
/ 03 августа 2010

Я использую другую технику добавления слушателей событий. В OnCreate-методе я пишу btnAdd.setOnClickListener(onAdd); и добавляю автономный метод для подключения к такому событию:

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

Это облегчает поиск ошибок в вашем коде.

Из вашего кода вы устанавливаете прослушиватель событий на весь список, а не на каждый отдельный элемент. Может быть, вам стоит попробовать добавить события к отдельным элементам?

...