2015-09-21 3 views
1

Я устанавливаю onClick на свой TextView телефон, позвонивший по телефону ListView. Когда нажата кнопка TextView, я хотел бы открыть экран Android Dial. Я передал контекст моей активности в свой Java-класс Custom Adapter, но приложение все равно продолжает сбой при каждом нажатии на мой TextView. Следующий код состоит из конструктора, а также последних нескольких методов в моем пользовательском адаптере Java Классе:StartActivity в пользовательском адаптере ListView

public CustomAdapter(Context c,ArrayList<String>n,ArrayList<String>nums, ArrayList<String>e){ 
      context = c; 
      phoneNumbers = nums; 
      names = n; 
      emails = e; 
      inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

...

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

    if (view == null){ 
     view = inflater.inflate(R.layout.contacts_custom_row,null); 
     TextView phone = (TextView)view.findViewById(R.id.customRowContactNumber); 

     phone.setOnClickListener(this); 
    } 
    return view; 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()){ 
     case R.id.customRowContactNumber:{ 
      Intent i = new Intent(Intent.ACTION_DIAL); 
      context.startActivity(i);//I passed the context to my constructor 
      break; 
     } 
    } 

} 

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

09-21 17:48:49.451 2003-2003/com.markfeldman.mydoggydays E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.markf.dogdays, PID: 2003 
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 
     at android.app.ContextImpl.startActivity(ContextImpl.java:1238) 
     at android.app.ContextImpl.startActivity(ContextImpl.java:1225) 
     at android.content.ContextWrapper.startActivity(ContextWrapper.java:323) 
     at com.markfeldman.mydoggydays.CustomAdapter.onClick(CustomAdapter.java:71) 
     at android.view.View.performClick(View.java:4780) 
     at android.view.View$PerformClick.run(View.java:19866) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5257) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

ответ

1

Если вы уверены, что здесь, где вы хотите, чтобы начать деятельность, которую вы можете добавить

Intent i = new Intent(Intent.ACTION_DIAL); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

затем запустить его, как вы были,

context.startActivity(i); 

Похоже контекстом вашего переход не контекст той или иной деятельности, которая является, почему это дает вам предупреждение. Если вы уверены, вы можете сделать то, что предложили @fixmycode с изменением объявления класса.

+0

Это то, что я передаю в свой класс CustomAdapter, когда он был создан в моей другой деятельности под названием Контакты: customAdapter = новый CustomAdapter (getApplicationContext(), имена, телефонные номера, электронные письма); Я пробовал передать класс, но приложение не будет работать правильно. Например, когда я передаю customAdapter = новый CustomAdapter (Contacts.this, имена, phoneNums, электронные письма); Мой Inflater работает неправильно, поэтому я передаю getApplicationContext() как один из моих параметров в класс CustomAdapter. Это плохо делать? –

+1

Вы должны (на мой взгляд) передать действие, поэтому используйте 'Контакты.this'; по крайней мере, это то, что я делаю. Если ваш надувной вентилятор работает неправильно, вы можете посмотреть, почему это происходит независимо. Я бы действительно предложил проверить некоторые из Vogella учебников по таким темам, как это - они действительно большие ресурсы о том, как делать вещи, и с хорошим стилем кодирования тоже! http://www.vogella.com/tutorials/AndroidListView/article.html – o0rebelious0o

0

В вашем объявлении класса:

public CustomAdapter(Activity activity, ...){ 
    Activity myActivity = activity; 
    ... 
} 

В вашем методе OnClick:

myActivity.startActivity(...); 
Смежные вопросы