2016-10-10 10 views
-2

でsimbolリストを解決することはできません、それは100%で動作します。エラーこれは私のコードである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 

エラーは「simbol 'list'を解決できません」です。

答えて

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); 
     ... 
    } 
} 

しかし、よりよい解決策は、UIを更新するために戻ってMainActivityにonPostExecuteからresultを渡すことであろう。このようにして

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); 
     ... 
    } 
} 

、あなたのActivityであなたのAsyncTask、すべてのUI処理中のすべてのデータの処理を続けます。

関連する問題