0

私はこのコードを使用して単純なリストビューで作業しています、

public class RadioDemoActivity extends Activity {
ArrayList<String> list = new ArrayList<String>();
MyListAdapter mla;
ListView lv;
int position = -1;

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

    lv = (ListView) findViewById(R.id.listView1);

    list.add("one");
    list.add("two");
    list.add("three");
    list.add("four");
    list.add("five");
    list.add("six");
    list.add("seven");
    list.add("eight");
    list.add("nine");
    list.add("ten");
    list.add("eleven");
    list.add("twelve");
    list.add("thirteen");
    list.add("fourteen");
    list.add("fifteen");
    list.add("sixteen");
    list.add("seventeen");
    list.add("eightteen");
    list.add("nineteen");
    list.add("twenty");

    mla = new MyListAdapter(this);
    lv.setAdapter(mla);

}


public class MyListAdapter extends BaseAdapter {
    private LayoutInflater mInflater;

    public MyListAdapter(Context context) {
        mInflater = LayoutInflater.from(context);

    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.cust_list, null);

            TextView tv = (TextView)convertView.findViewById(R.id.txt_title);
            ImageView iv = (ImageView)convertView.findViewById(R.id.imageView1);
            tv.setText(list.get(position));
            Log.v("log_tag","position In"+list.get(position));

        }
        return convertView;
    }
  }
}

しかし、結果は、11が1、1、2を表示した後のImageのようになります。私を助けてください ここに画像の説明を入力してください

4

5 に答える 5

2
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
         ListHolder holder = null;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.cust_list, null);
            holder=new ListHolder();
            holder.tv = (TextView)convertView.findViewById(R.id.txt_title);
            holder.iv = (ImageView)convertView.findViewById(R.id.imageView1);
            Log.v("log_tag","position In"+list.get(position));
            convertView.setTag(holder);
        }
         else
        {
        holder=(ListHolder) convertView.getTag();
        }
        holder.tv.setText(list.get(position));
        return convertView;
    }
 static class ListHolder
{
    TextView tv;

    ImageView iv;
}

常にホルダーにelse条件を記述してください。

于 2012-07-17T12:37:33.603 に答える
1

次のように変更getView()します。

public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.cust_list, null);
    }
    TextView tv = (TextView)convertView.findViewById(R.id.txt_title);
    ImageView iv = (ImageView)convertView.findViewById(R.id.imageView1);
    tv.setText(list.get(position));
    Log.v("log_tag","position In"+list.get(position));

    return convertView;
}
于 2012-07-17T12:30:00.620 に答える
1

「正しい」場所にコメントを追加することはできませんが、LVをスクロールビューに配置するという上記のNiteeshMehraの提案は間違っています。LVは、垂直方向にスクロールするリストにアイテムを表示するビューであるため、再度表示する必要はありません。

あなたの問題に関しては-あなたのgetView()実装は間違っています。convertViewがnullでない場合は、指定されたビューを再利用する必要がありますが、再利用とは、ビューレイアウト)が既にベイクされていることを意味しますが、それでもこの行に適切なコンテンツを入力する必要があります。したがって、次のようなことを行う必要があります。

if( convertView == null ) {
 convertView = <inflate view from XML>;
}

次に、ビューの要素内のデータを無条件に表示します。

于 2012-07-17T12:32:16.910 に答える
1

getView() をこのように変更し、問題を解決しました。

public View getView(int position, View convertView, ViewGroup parent) {

        convertView = mInflater.inflate(R.layout.cust_list, null);

        TextView tv = (TextView) convertView.findViewById(R.id.txt_title);
        ImageView iv = (ImageView) convertView.findViewById(R.id.imageView1);

        tv.setText(list.get(position));
        tv.setTag(list.get(position));

        if (RadioDemoActivity.this.position==position)
            iv.setImageResource(R.drawable.greenround);

        return convertView;

    }
于 2012-07-18T09:15:36.963 に答える
0

getViewこのように方法を変更する

if (convertView == null) {
        convertView = mInflater.inflate(R.layout.cust_list, null);
        }
        TextView tv = (TextView)convertView.findViewById(R.id.txt_title);
        ImageView iv = (ImageView)convertView.findViewById(R.id.imageView1);
        tv.setText(list.get(position));
        Log.v("log_tag","position In"+list.get(position));
于 2012-07-17T12:30:14.497 に答える