hoffen, dass Sie schön und gut,Passing Arraylist von AsyncTask PagerAdapter
Ich habe folgende Hauptklasse:
public class MainActivity extends AppCompatActivity {
Activity activity;
ViewPager viewPager;
CustomAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager=(ViewPager)findViewById(R.id.view_pager);
adapter=new CustomAdapter(this);
viewPager.setAdapter(adapter);
ConnectionAsyncTask connectionAsyncTask = new
ConnectionAsyncTask(MainActivity.this);
connectionAsyncTask.execute("http://www.mocky.io/v2/570d3677270000f600dc29b6");
}
public void showUploader()
{
// findViewById(R.id.progressBar1).setVisibility(View.VISIBLE);
}
public void hideUploader()
{
//findViewById(R.id.progressBar1).setVisibility(View.GONE);
}
public void DisplyOnTextView(List<Student> students) {
List <Student> my = students ;
}
}
wenn ich die app laufen, wird diese Haupttätigkeit eine andere Klasse verwenden JSON-Daten zu lesen wie folgt aus Link:
public class StudentJasonParser {
public static List<Student> getObjectFromJason(String jason)
{
List<Student> students;
try {
JSONArray jsonArray = new JSONArray(jason);
students = new ArrayList<>();
for(int i=0;i<jsonArray.length();i++)
{
JSONObject jsonObject = new JSONObject();
jsonObject= (JSONObject) jsonArray.get(i);
Student student = new Student();
student.setID(jsonObject.getInt("id"));
student.setName(jsonObject.getString("name"));
student.setUrl(jsonObject.getString("url"));
student.setDes(jsonObject.getString("des\n"));
student.setRate(jsonObject.getDouble("rate"));
student.setLon(jsonObject.getDouble("lon"));
student.setLat(jsonObject.getDouble("lat"));
students.add(student);
}
} catch (JSONException e) {
e.printStackTrace();
return null;
}
return students;
}
}
jetzt diese Klasse werden die Daten auf die folgende Klasse zurückgeben:
public class ConnectionAsyncTask extends AsyncTask<String,String,String> {
Activity activity;
public ConnectionAsyncTask(Activity activity) {
this.activity=activity;
}
@Override
protected void onPreExecute() {
//((MainActivity)activity).DisplyOnTextView();
((MainActivity)activity).showUploader();
}
@Override
protected String doInBackground(String... params) {
String content =HttpManager.getData(params[0]);
return content;
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String s) {
((MainActivity)activity).hideUploader();
List<Student> students= StudentJasonParser.getObjectFromJason(s);
if (students != null) {
((MainActivity) activity).DisplyOnTextView(students);
}
}
}
diese Zeile: ((MainActivity)activity).DisplyOnTextView(students);
werden die abgerufenen Daten an die Hauptklasse in der folgenden Funktion zurückzukehren (in der Hauptklasse erwähnt!
)public void DisplyOnTextView(List<Student> students) {
List <Student> my = students ;
}
jetzt, was ich will, ist diese Liste der folgenden Klasse übergibt, um es in der Imageview und Textview in dem viewPager anstelle der vordefinierten Daten in der Klasse zu verwenden:
public class CustomAdapter extends PagerAdapter {
private int[] images = {R.drawable.sample_0,R.drawable.sample_1};
private Context ctx;
private LayoutInflater LayoutInflater;
public CustomAdapter(Context ctx)
{
this.ctx=ctx;
}
@Override
public int getCount() {
return images.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return (view==(LinearLayout)object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
LayoutInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = LayoutInflater.inflate(R.layout.slide_layout,container,false);
ImageView imageView =(ImageView) view.findViewById(R.id.image_view);
TextView textView = (TextView)view.findViewById(R.id.image_count);
imageView.setImageResource(images[position]);
textView.setText(""+position);
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((LinearLayout) object);
}
}
keine Idee?!
danke, grüße.
, ohne den Rest des Codes zu sehen, 'neue CustomAdapter (getContext(), Liste)' ist ein guter Anfang –
Mögliche Duplikat [Custom-Adapter für Listenansicht] (http: // Stapelüberlauf.com/questions/8166497/custom-adapter-for-list-view) –
in der angegebenen link erweitert er ArrayAdapter in der CustomAdapter-Klasse, aber h erweitert bereits pagerAdapter, und wie Sie wissen, können wir zwei Klassen nicht erweitern! Kannst du mir bitte Helfen ! –
MSMC