2015-05-05 5 views
1

У меня естьмассив адаптер не вызывает GetView

public class MainActivity extends FragmentActivity 

Я написал Loader класс, который реализует AsyncResponse:

public class Loader implements AsyncResponse { 
public Activity contextActivity; 

Loader(Activity context) { 
    this.contextActivity = context; 
} 

класса "Погрузчик" имеет метод "DrawTabInfo", который призывающую от AsyncResponse обратного вызова.

public void drawTabInfo(String jsonBlob, int tabId) 
{ 
    JSONObject dataJsonObj; 
    PullToRefreshListView list = null; 

    try { 
     dataJsonObj = new JSONObject(jsonBlob); 
     JSONArray jsonData = dataJsonObj.getJSONArray("steals"); 

     ArrayList<JSONObject> data = new ArrayList<JSONObject>(); 
     for (int i=0;i<jsonData.length();i++){ 
      data.add(jsonData.getJSONObject(i)); 

     } 
     Adapter adapter = new Adapter(contextActivity, data); 

     LayoutInflater inflater = LayoutInflater.from(contextActivity); 

     if (tabId == 0) { 
      View view = inflater.inflate(R.layout.listviewlayout, null, false); 
      list = (PullToRefreshListView) view.findViewById(R.id.listView); 
     } 
     if (tabId == 1) { 
      View view = inflater.inflate(R.layout.listviewlayout2, null, false); 
      list = (PullToRefreshListView) view.findViewById(R.id.listView2); 
     } 

     list.setAdapter(adapter); 
     adapter.setNotifyOnChange(true); 

Log.d ("COUNT") показывает - "4", что означает, что массив построен отлично.

public class Adapter extends ArrayAdapter<JSONObject> { 
    private final Activity context; 
    private final ArrayList<JSONObject> profiles; 
    public String header; 
    public String preText; 
    public String imageURL; 

    static class ViewHolder { 
     public TextView header; 
     public ImageView image; 
     public TextView preText; 
     public LinearLayout linearItemLayout; 
    } 

    public Adapter(Activity context, ArrayList<JSONObject> array) { 
     super(context, R.layout.tab1_list_layout, array); 
     Log.d("ADAPTER", "SETTING ADAPTER"); 
     this.context = context; 
     this.profiles = array; 
     Log.d("COUNT", "" + profiles.size()); 
    } 

    @Override 
    public int getCount() 
    { 
     return profiles.size(); 
    } 

Мой метод GetView:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View rowView = convertView; 
    Log.i("GetView Log", "Adapters GetView hasbeen called");// thats never calling 

    if (rowView == null) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     rowView = inflater.inflate(R.layout.tab1_list_layout, null); 

     ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.linearItemLayout = (LinearLayout) rowView.findViewById(R.id.linearItemLayout); 
     viewHolder.header = (TextView) rowView.findViewById(R.id.itemHeader); 
     viewHolder.image = (ImageView) rowView.findViewById(R.id.itemPreImage); 
     viewHolder.preText = (TextView) rowView.findViewById(R.id.itemPreText); 
     rowView.setTag(viewHolder); 
    } 

    ViewHolder holder = (ViewHolder) rowView.getTag(); 
    JSONObject item = null; 

    try { 
     item = profiles.get(position); 
     header = item.getString("header"); 
     preText = item.getString("previewText"); 
     imageURL = item.getString("previewImageUrl"); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    Log.d("ADAPTER LOG", header); 

    holder.header.setText(header); 
    holder.preText.setText(preText); 

    int headerHeight = (int) Math.round(header.length() * 1.5); 
    holder.linearItemLayout.setMinimumHeight(40 + headerHeight + preText.length()); 

    Picasso.with(context).setIndicatorsEnabled(true); 
    Picasso.with(context).load(imageURL).resize(140,100).into(holder.image); 

    return rowView; 
} 

В MainActivity я призванию, где "это" = MainActivity;

Loader loader = new Loader(this); 
    loader.loadTabInfo(0); 

Метод getView никогда не звонит. Что я делаю неправильно?

UPD:

Решено:

public void drawTabInfo(String jsonBlob, int tabId) 
{ 
    JSONObject dataJsonObj; 
    PullToRefreshListView list = null; 

    try { 
     dataJsonObj = new JSONObject(jsonBlob); 
     JSONArray jsonData = dataJsonObj.getJSONArray("steals"); 

     ArrayList<JSONObject> data = new ArrayList<JSONObject>(); 
     for (int i=0;i<jsonData.length();i++){ 
      data.add(jsonData.getJSONObject(i)); 

     } 
     Adapter adapter = new Adapter(contextActivity, data); 

     //LayoutInflater inflater = LayoutInflater.from(contextActivity); 

     if (tabId == 0) { 
      //View view = inflater.inflate(R.layout.listviewlayout, null, false); 
      list = (PullToRefreshListView) contextActivity.findViewById(R.id.listView); 
+0

Проверьте операторы импорта ** Адаптер **. В Android есть интерфейс Adapter, поэтому лучше измените имя класса адаптера на ** MyAdapter ** и проверьте. – Aniruddha

ответ

0

Ваш код хорошо .. только вам нужно немного изменить битовую в методе просмотра прибудете добавить оператор возврата .. как return rowView;

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View rowView = convertView; 
    Log.d("GETVIEaW", "GETVIEW"); 

     if (rowView == null) { 
      LayoutInflater inflater = context.getLayoutInflater(); 
      rowView = inflater.inflate(R.layout.tab1_list_layout, null); 

      ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.linearItemLayout = (LinearLayout) rowView.findViewById(R.id.linearItemLayout); 
      viewHolder.header = (TextView) rowView.findViewById(R.id.itemHeader); 
      viewHolder.image = (ImageView) rowView.findViewById(R.id.itemPreImage); 
      viewHolder.preText = (TextView) rowView.findViewById(R.id.itemPreText); 
      rowView.setTag(viewHolder); 
      } 
     else{ 
     viewHolder = (ViewHolder) rowView.getTag(); 
     } 

     viewHolder.preText.setText("Type your name"); 

     return rowView; 

    } 
+0

Спасибо за ответ, но оператор return уже находится в методе получения: – Insight

+0

Log.d («GETVIEaW», «GETVIEW») - это не вызов – Insight

+0

, пожалуйста, просмотрите отредактированный файл ans .... add else и установите текст или изображение с вашим текстовым просмотром или изображением –

0

Вы уверены, что Log.d() не называется? Вы можете изменить область ведения журнала, обычно по умолчанию - info, и она не отображает отладочные сообщения. Вы можете попытаться использовать Log.i() или изменить область действия.

+0

Теперь я попробовал Log.i, и ничто в logcat ... – Insight

0

Попробуйте отправить ваш adapter.setNotifyOnChange(true); в обработчик. Следуйте за этим link

+0

Не помогло ... (( – Insight

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