1

Я пытаюсь сделать listview несколькими элементами в строке, которая содержит imageview и textview. Теперь я хочу получить доступ только к представлению изображения строки списка, а затем использовать его, чтобы начать новое намерение, щелкнув его. Вот моя основная деятельность:Использование только viewview в строке списка для начала нового намерения

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; 
} 

}

Так скажите, пожалуйста, как только использовать ImageView в ряд, чтобы начать новое намерение в соответствии с его положением в ListView?

+0

Вы можете добавить 'onClickListener 'для вашего' holder.bEventPage' – Triode

+0

@RajeshCP Я сделал это в своем основном действии, но я не могу сделать это в классе адаптера, потому что startActivity не определен для моего класса адаптера. – Jaycee

ответ

1

Добавить слушатель к просмотру изображения в adapter..and удалить его из слушателя элемента списка

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; 
} 
+0

Я не могу этого сделать, потому что здесь startActivity (i) не определено для класса myadapter. startActivity определяется только для класса Activity, но не может расширять его, поскольку я уже расширил класс BaseAdapter. – Jaycee

+0

вы уже передаете активность своему адаптеру, используете его, проверяете обновленный ответ – Nermeen

0

вы можете установить OnClick слушатель onImageView в методе GetView из MyAdapter

+0

Я не могу этого сделать, потому что хочу новое намерение запустить их и startActivity (намерение) не определено для моего класса адаптера – Jaycee