2012-01-15 9 views
-1
public class ImageAndTextListAdapter extends ArrayAdapter<ImageAndText> { 

// new method 
    private ListView listView; 
    private AsyncImageLoader asyncImageLoader; 
    private ImageAndText imageAndText; 

//constructor 
public ImageAndTextListAdapter(Activity activity, List<ImageAndText> imageAndTexts) { 
    super(activity, 0, imageAndTexts); 


    asyncImageLoader = new AsyncImageLoader(); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Activity activity = (Activity) getContext(); 


    //////////////////////////////////////////////////////////////////////////////////////////////// 
    // Load the image and set it on the ImageView 


    //new method 
    // Inflate the views from XML 
    View rowView = convertView; 
    ViewCache viewCache; 

    if (rowView == null) { 
     LayoutInflater inflater = activity.getLayoutInflater(); 
     rowView = inflater.inflate(R.layout.image_and_text_row, null); 
     viewCache = new ViewCache(rowView); 
     rowView.setTag(viewCache); 
    } else { 
     viewCache = (ViewCache) rowView.getTag(); 
    } 
    imageAndText = getItem(position); 

    Button btn2=(Button) findViewById(R.id.button1); 

     btn2.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

        //........... 
       } 
     }); 

このアダプターはListView用で、listviewの行データを表すimage_and_text_row.xmlを取ります。クリックリスナーをbtn2に設定すると、プログラムがクラッシュしました。リスナーが削除された場合、プログラムはうまく動作します。リストビューのアダプターの中にボタンクリックリスナーの問題があります

なぜアダプターはコード内にボタンクリックリスナーを持つことができないのですか?

+0

あなたのlogcatとは何ですか? –

+0

Jason、あなたは絶対にアダプターにクリックリスナーを持つことができます。あなたの問題はあなたのlogcatにあるはずです。それもここに投稿するのに役立つかもしれません。 –

+0

例外はありますか? –

答えて

1

Button btn2=((Button)rowView.findViewById(R.id.button1));をこれはあなたの問題になる可能性があります。しかし、あなたのラインButton btn2=(Button) findViewById(R.id.button1);したがって、R.id.button1が存在していない...

あなたは試したことがあり、アダプターが入っていることをListActivityまたはリストビューを指し、 (あなたのlogcatを見ることができなくても)。 findViewById()は子供を見つけます。元のステートメントはアクティビティーまたはビューの子を探します。この新しいステートメントは、rowViewの子を検出します。

もちろん、これは前提条件です。アプリケーションや問題を完全に記述していないため、すべての行にボタンがあるという情報に基づいていると仮定しなければなりません。

P.S.このことができます

希望、

FuzzicalLogic関連情報が不足している場合は、このような厄介な回答が得られるというヒントをキャッチしてくれることを願っています。良いガイドです:1)何が起こっていますか? 2)あなたは何が起こると思いますか? 3)デバッグリソースは何を表していますか? 4)補足的な研究や概念を知る必要がありますか?これらは長い質問につながりますが、確かにより効果的であり、その結果として得られる答えもそうです。

+0

これは、rowView.findByIdを修正することで、Viewを見つけることができなかったことです。 –

0

あなたはボタンがあるxmlファイルにonClickを追加します。 また、ボタンが膨張しているのと同じレイアウト内にあることを確認してください。ただ、暗闇の中でショット

関連する問題