2016-10-10 2 views
-2

Это мой код, он работает на 100%:Ошибка не может разрешить Simbol список с list.setAdapter (адаптер)

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View inflatedView = inflater.inflate(R.layout.t1, container, false); 
    final ListView list = (ListView) inflatedView.findViewById(R.id.list); 
    class json extends AsyncTask<String,String, List<MovieModel> > { 
     ... 
     @Override 
     protected void onPostExecute(final List<MovieModel> result) { 
      ... 
      MainActivity.Adapter adapter = new MainActivity.Adapter(getActivity().getApplicationContext(), R.layout.row, result); 
      list.setAdapter(adapter); 
      list.setOnItemClickListener 
      ... 
     } 
} 

, но теперь мне нужно позвонить класс JSon в другом месте тоже:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
.... 
class json ..... 
} 

@Override 
public void onRefresh() { 
    new json();// i can't recall in this way, but i need it 
} 

Проблема заключается в списке, потому что я не могу отключиться от onCreateView, потому что список не определен, если я это делаю.

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    .... 
    new json(); 
} 
class json extends AsyncTask<String,String, List<MovieModel> > { 
    ... 
    @Override 
    protected void onPostExecute(final List<MovieModel> result) { 
     ... 
     MainActivity.Adapter adapter = new MainActivity.Adapter(getActivity().getApplicationContext(), R.layout.row, result); 
     list.setAdapter(adapter);//this is an error now 

Ошибка теперь «не может разрешить список симбола».

ответ

1

Быстрое решение было бы сделать переменную класса list.

public class MainActivty extends Activity { 
    private ListView mList; 

    private class json extends AsyncTask<String,String, List<MovieModel> > { 
     ... 
     @Override 
     protected void onPostExecute(final List<MovieModel> result) { 
     ... 
     mList.setAdapter(adapter); 
     ... 
    } 
} 

Но лучшим решением было бы передать result от onPostExecute обратно в MainActivity для обновления пользовательского интерфейса.

public class MainActivty extends Activity { 
    private ListView mList; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View inflatedView = inflater.inflate(R.layout.t1, container, false); 
     mList = (ListView) inflatedView.findViewById(R.id.list); 
     ... 
    } 

    private void updateUI(final List<MovieModel> result> { 
     MainActivity.Adapter adapter 
      = new MainActivity.Adapter(getActivity().getApplicationContext(), R.layout.row, result); 
     mList.setAdapter(adapter); 
     ... 
    } 

    private class json extends AsyncTask<String,String, List<MovieModel> > { 
     ... 
     @Override 
     protected void onPostExecute(final List<MovieModel> result) { 
     ... 
     updateUI(result); 
     ... 
    } 
} 

Таким образом, вы сохраняете всю обработку данных в вашем и обработки всех UI AsyncTask в вашем Activity.

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