2015-05-05 3 views
0

Я уверен, что на это где-то ответили, но не могу найти его.ImageButton - это ListView, начинающий новую активность onClick, Android

У меня есть ListView целей пользователя ... У меня есть кнопка на вершине, где пользователи могут добавлять цели:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    style="@style/secondaryBackground" 
    tools:context="android.bignerdranch.com.mobilemidwife.GoalsList"> 

    <ImageButton 
     android:id="@+id/addgoal" 
     style="@style/FloatingActionButtonOrange" 
     android:src="@drawable/ic_action_new" 
     android:layout_alignParentRight="true" 
     android:contentDescription="add goal" 
     android:onClick="btnRemoveClick" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/white" 
     android:layout_below="@+id/addgoal" 
     android:orientation="vertical" 
     android:id="@+id/goalsection"> 

     <TextView 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent" 
      android:text="Goal Name" 
      android:id="@+id/goalname" 
      android:padding="10dp" 
      style="@style/orangetextlarger" 
      android:layout_gravity="left" /> 

    </LinearLayout> 

</RelativeLayout> 

Кнопка AddGoal не является на самом деле частью ListView ... это а не часть извлекаемых данных. Я попытался щелкнуть кнопку, чтобы начать новую активность в адаптере, но я не смог; Я добавил код внутри функции GetItemView, но мне кажется, findViewById не может быть решена

@Override 
public View getItemView(ParseObject object, View view, ViewGroup parent) { 

    if (view == null) { 
     view = View.inflate(getContext(), R.layout.activity_goals_list, null); 
    } 

    // use midwifefirm as item view/list 

    super.getItemView(object, view, parent); 

    // find in layout the practice name 
    TextView titleTextView = (TextView) view.findViewById(R.id.goalname); 

    //in the midwifefirm data model, call getPracticename 
    titleTextView.setText(object.getString("goalname")); 

    mAddGoal = (ImageButton) findViewById(R.id.addgoal); 
    mAddGoal.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(GoalListAdapter.this, AddGoal.class); 
      startActivity(intent); 
     } 
    }); 

    return view; 
} 

Я также думал в ImageButton в макете, я мог бы установить функцию OnClick там?

Извинения, я знаю, что это, вероятно, где-то есть, но не может понять это.

ответ

0

Я не совсем уверен, что вы пытаетесь сделать, но удалить код

android:onClick="btnRemoveClick" 

из вашего XML. это может сработать.

1

Используйте надутый вид

Вы должны использовать надутый вид при нахождении вида с findViewById. Вы должны иметь:

mAddGoal = (ImageButton) view.findViewById(R.id.addgoal);

вместо:

mAddGoal = (ImageButton) findViewById(R.id.addgoal);


Удалите XML OnClick

Если вы спускаясь маршрут установив onClickListener, то вам должен удалить атрибут onClick, установленный в ImageView в XML.

Снимите следующие из элемента @+id/addgoal:

android:onClick="btnRemoveClick"


Переходя в контексте

Для того, чтобы начать деятельность с вашего класса, вам необходимо пройти в контексте. Пример показан ниже:

public class ParseAdapter extends ParseQueryAdapter<ParseObject> { 
    private Context mContext; 

    public ParseAdapter(Context context) { 
     this.mContext = context; 
    } 

    ... 

    @Override 
    public View getItemView(ParseObject object, View view, ViewGroup parent) { 
     ... 
     mAddGoal = (ImageButton) findViewById(R.id.addgoal); 
     mAddGoal.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(GoalListAdapter.this, AddGoal.class); 
       mContext.startActivity(intent); 
      } 
     }); 
    } 
} 
+0

Привет, который работал ... Теперь я хочу, чтобы начать деятельность, когда эта кнопка нажата ... для по какой-то причине startActivity не может быть разрешен; Спасибо за помощь! –

+0

Вам нужно передать 'Context' в свой класс. Пожалуйста, ознакомьтесь с моим обновленным ответом на примере передачи Context через конструктор. В этом примере активность запускается через «mContext.startActivity (намерение)»; – Jamie

0

Это закончилось для меня работой; после некоторых исследований, и, глядя на выше ответы, я понял, что мне нужно использовать getContext():

@Override 
    public View getItemView(ParseObject object, View view, final ViewGroup parent) { 

     if (view == null) { 
      view = View.inflate(getContext(), R.layout.activity_goals_list, null); 

     } 

     //use midwifefirm as item view/list 

     super.getItemView(object, view, parent); 


     // find in layout the practice name 
     TextView titleTextView = (TextView) view.findViewById(R.id.goalname); 

     //in the midwifefirm data model, call getPracticename 
     titleTextView.setText(object.getString("goalname")); 



     mAddGoal = (ImageButton) view.findViewById(R.id.addgoal); 
     mAddGoal.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(parent.getContext(), AddGoal.class); 
       v.getContext().startActivity(intent); 
      } 


     }); 

     return view; 





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