1

我正在尝试使 listview 连续包含多个项目,其中包含 imageview 和 textview 。现在我只想访问列表视图中一行的图像视图,然后通过单击它来启动一个新的意图。这是我的主要活动:

public class MTCRichGraphicsActivity extends Activity {
int ELEMENT_COUNT = 1;
int position=0;
ImageButton bAddView;
ImageView bEventPage;
int r =0 ;   

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    bAddView = (ImageButton) findViewById(R.id.bNewEvent);
    bEventPage = (ImageView) findViewById(R.id.ivEvent);
    final ListView list = (ListView) findViewById(R.id.list3d);

    bAddView.setOnClickListener(new View.OnClickListener() {
    List<String> element = new ArrayList<String>(); 

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch(v.getId())
            {
            case R.id.bNewEvent :
                //String[] elements = new String[ELEMENT_COUNT];
                //for (int i = 0; i< ELEMENT_COUNT; i++) {
                    //elements[i] = String.valueOf(i);
                    element.add(String.valueOf(ELEMENT_COUNT++));
                //}
                final MyAdapter adapter = new MyAdapter(MTCRichGraphicsActivity.this,element);
                //list.setScrollY(currentPosition);
                //list.setTranslationY(currentPosition);
                list.setDivider( null ); 
                list.setAdapter(adapter);
                list.setTranscriptMode(1);
                list.setStackFromBottom(true);
                //ELEMENT_COUNT = ELEMENT_COUNT + 1;
                adapter.notifyDataSetChanged();                         
            }

        }
    });

    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {
            // TODO Auto-generated method stub

            bEventPage.setFocusable(false);
            bEventPage.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Intent i = new Intent("de.inovex.mtc.EventsPage");
                    startActivity(i);   
                }
            });

        }

    });

}

}

现在这里 bEventPage 是一个 ImageView ,当我单击任何 listview 行时,整行都会突出显示并给我一个空指针异常,但是没有单击 imageview 并且新活动没有启动。这是我的适配器类:

public class MyAdapter extends BaseAdapter {

private final LayoutInflater mInflater;
private final List<String> mItems;
TextView t;
ViewHolder holder;
public MyAdapter(Activity c,List<String> objects) {
    mInflater = c.getLayoutInflater();
    mItems = objects;
}

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


@Override
public View getView(int position, View convertView, ViewGroup parent) {
    TextView t;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.listitem, parent,false);
}
    holder = new ViewHolder();
    holder.t1 = (TextView) convertView.findViewById(R.id.textView1); 
    holder.t2 = (TextView) convertView.findViewById(R.id.textView2);
    holder.t3 = (TextView) convertView.findViewById(R.id.textView3);
    holder.t4 = (TextView) convertView.findViewById(R.id.textView4);
    holder.bEventPage = (ImageView) convertView.findViewById(R.id.ivEvent);
    holder.t1.setText("Title"+position);


    //((ImageView)convertView).setTextAlignment(1);

    return convertView;
}

@Override
public Object getItem(int position) {
    return mItems.get(position);
}

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

}

那么请告诉我如何根据它在listview中的位置只使用一行的imageview来启动一个新的intent?

4

2 回答 2

1

将侦听器添加到适配器中的图像视图..并将其从列表项侦听器中删除

Activity activity;

public MyAdapter(Activity c,List<String> objects) {
   mInflater = c.getLayoutInflater();
   mItems = objects;
   activity = c;
}

public View getView(int position, View convertView, ViewGroup parent) {
TextView t;
if (convertView == null) {
    convertView = mInflater.inflate(R.layout.listitem, parent,false);
}
holder = new ViewHolder();
holder.t1 = (TextView) convertView.findViewById(R.id.textView1); 
holder.t2 = (TextView) convertView.findViewById(R.id.textView2);
holder.t3 = (TextView) convertView.findViewById(R.id.textView3);
holder.t4 = (TextView) convertView.findViewById(R.id.textView4);
holder.bEventPage = (ImageView) convertView.findViewById(R.id.ivEvent);
holder.t1.setText("Title"+position);


holder.bEventPage.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent i = new Intent("de.inovex.mtc.EventsPage");
                activity.startActivity(i);   
            }
        });

return convertView;
}
于 2013-03-26T13:25:12.577 回答
0

您可以在 MyAdapter 的 GetView 方法中设置 onClick 侦听器 onImageView

于 2013-03-26T13:25:47.693 回答