2011-03-31 1 views
2
public class controller extends Activity { 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Context currentContext = this; 
    final BlinkAPI blinkAPI = new BlinkAPI(currentContext); 


    lvRadio = (ListView)findViewById(R.id.ListViewRadio); 
    } 
    ... 
    } 
    //*********************************** 
    //Separate file 

    public class BlinkAPI { 

private static Context mContext; 
static ListView radioLV; 


public BlinkAPI(Context ctx) 
{ 
    BlinkAPI.mContext = ctx; 

    radioLV = (ListView)((Activity) mContext).findViewById(R.id.ListViewRadio); 

} 

private static void updateRadioTitles() { 
     radioTitleAdapter = (ArrayAdapter<String>) radioLV.getAdapter(); 
     ...//Get titleStr etc 
     radioTitleAdapter.add(titleStr);   
     radioTitleAdapter.notifyDataSetChanged(); 
} 

Этот код вылетает изAcessing ArrayAdapter в OnCreate из другого класса

ответ

0

Если у вас есть доступ к ListView вы можете использовать radioLV.getAdapter()

0

Вы можете получить адаптер, вызывая radioLV.getAdapter()

Но вы не можете изменить его (добавить/удалить элементы). Чтобы изменить его - создайте и установите новый адаптер или напишите расширение ArrayAdapter и добавьте к нему метод setObjects.

+0

Когда я пытаюсь добавить адаптер к ListView lvRadio прог аварий на тот момент –

+0

Может быть вы сделать это не в UI потоке? Попробуйте radioLV.post (новый Runnable (public void run() {radioLV.setAdapter (..); radioTitleAdapter.add (titleStr);}});) – Flavio

1

Прежде всего: raukodraug и Flavio правы! Вы не можете позвонить:

myAdapter = radioLV.getAdapter(); 

, чтобы получить адаптер ListView.

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

private Adapter myAdapter; 

Если вы теперь хотите обновить адаптер можно вызвать следующий метод (убедитесь, что вы делаете эти вызовы на ПИ-нить, в противном случае ListView обыкновение быть обновлена):

myAdapter.add(newItem); // whatever item you might want to add 
myAdapter.notifyDataSetChanged(); 
+0

контекст для myAdapter contructor? это не сработает \t ArrayAdapter radioTitleAdapter = new ArrayAdapter (null, android.R.layout.simple_expandable_list_item_1, radioTitleArrayList); –

+0

Я не понимаю! Возможно, вы хотите опубликовать весь код. –