2014-02-14 2 views
1

Я использую следующий код для создания пользовательского ListView. Все работает нормально, но когда пользователь нажимает на список, я не могу заставить его перейти в другой класс, поскольку Intents нельзя использовать в классе non Activity. Есть ли способ начать работу по приведенному ниже коду ???Как начать работу с класса, расширяющего BaseAdapter?

public class CustomAdapter extends BaseAdapter { 
String[] result; 
Context context; 
int[] imageId; 
private static LayoutInflater inflater = null; 

public CustomAdapter(MainActivityList mainActivity, String[] prgmNameList, 
     int[] prgmImages) { 
    // TODO Auto-generated constructor stub 
    result = prgmNameList; 
    context = mainActivity; 
    imageId = prgmImages; 
    inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return result.length; 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 

public class Holder { 
    TextView tv; 
    ImageView img; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    Holder holder = new Holder(); 
    View rowView; 
    rowView = inflater.inflate(R.layout.program_list, null); 
    holder.tv = (TextView) rowView.findViewById(R.id.textViewlist); 
    holder.img = (ImageView) rowView.findViewById(R.id.imageViewlist); 
    holder.tv.setText(result[position]); 
    holder.img.setImageResource(imageId[position]); 

    rowView.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      switch(position) 
      { 
      case 0: 
      { 
       //Intent is not working here 
            //Here i need some help 
      } 
      } 
     } 
    }); 
    return rowView; 
} 

} 

Я застрял в этой части проекта, пожалуйста, помогите мне ..

ответ

9

контекст использования активность

Intent intent = new Intent(context,AnotherActivity.class); 
context.startActivity(intent); 
+0

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

+0

@DarshanGowda вам нужен только контекст. нет необходимости продлять действие. – Raghunandan

+0

@DarshanGowda Intent не имеет ничего общего с Activity http://developer.android.com/reference/android/content/Intent.html. Вам нужен только контекст, который уже инициализируется в конструкторе адаптера. 'startActivity' - это метод активности. поэтому вам нужен контекст для startactivity – Raghunandan

1

Для того, чтобы не перегружать Adapter, я бы зарегистрировать каждый строка для контекстного меню с использованием registerForContextMenu(convertView). Таким образом, вам нужно будет выполнить onCreateContextMenu() и onContextItemSelected() за пределами Adapter, возможно, в пределах Activity вы заполняете ListView и задаете startActivity() внутри этого Activity, где он будет работать нормально.

Ниже приведен пример:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    menu.setHeaderTitle("Context menu"); 
    menu.add(Menu.NONE, 0, 0, "Start the new Activity"); 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    final int mId = item.getItemId(); 

    switch (mId) { 
    case 0:   // Entrar a un canal 
     final Intent intent = new Intent(context, MySecondActivity.class); 
     startActivity(intent); 

     break; 

    default: 
     break; 
    } 

    return true; 
} 
+0

Я не имел в виду, что вам нужно расширить свою деятельность. Я говорю, что есть момент, когда вы инициализируете свой «ListView», правильно? В этом же файле вам нужно будет реализовать два метода, которые я добавил к моему ответу, и там вы можете получить «Context», поскольку вы будете выполнять это в некоторых «Activity» или «Fragment». – nKn

+1

Это также работает, но ответ, который я принял, намного проще –

0
list.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1,int pos, long arg3) { 
     Intent intent= new Intent(currentClass.this,secondActivity.class); 
     currentClass.this.startActivity(intent); 
     finish();      
    } 
}); 
1

Вы также можете сделать так ..

public void onClick(View v){ 
Intent yourIntent = new Intent(context,AnotherActivity.class); 
yourIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
v.getContext().startActivity(yourIntent); 

}

1
TextView mealName = (TextView) view.findViewById(R.id.mealNameDietTXT); 
    mealName.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) 
     { 
      SessionClass.subMealID=mealsArray.get(position).getMealComponentId(); 
      Intent i = new Intent(dietRadioAdapter.this.context, dietDetails.class); 
      dietRadioAdapter.this.context.startActivity(i); 

     } 
    }); 
Смежные вопросы