2016-07-26 3 views
0

Я хочу использовать представление списка с помощью адаптера пользовательского списка. Моя проблема в том, что я не получаю просмотр списка во время выполнения приложения.ListView с помощью пользовательского адаптера просмотра списка

CourseActivity.java

package com.technerdshub.vusocial.Activities; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.ListView; 
import android.widget.Toast; 

import com.parse.ParseException; 
import com.parse.ParseObject; 
import com.parse.SaveCallback; 
import com.technerdshub.vusocial.DBHelper; 
import com.technerdshub.vusocial.Models.Course; 
import com.technerdshub.vusocial.Models.StudyProgramModel; 
import com.technerdshub.vusocial.Models.User; 
import com.technerdshub.vusocial.R; 

import java.util.ArrayList; 
import java.util.List; 

public class CourseActivity extends AppCompatActivity { 

    ListView list; 
    ArrayList arrayList = new ArrayList(); 
    CourseViewAdapter adapter; 
    Course courseObject; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.course_activity); 


     List<Course> courseList; 
     DBHelper db = new DBHelper(this); 
     courseList = db.getAllCourses(); 

     list = (ListView) findViewById(R.id.listview1); 

     for (Course c : courseList) 
     { 
      arrayList.add(c); 
     } 

     adapter = new CourseViewAdapter(this, arrayList); 
     adapter.courseActivity = this; 
     list.setAdapter(adapter); 

     User user = User.getInstance(); 
     saveUserOnParse(user); 

    } 

    private void saveUserOnParse(User user) { 
     ParseObject parseUser = new ParseObject("UserData"); 
     parseUser.put("name", user.getName()); 
     parseUser.put("vuId", user.getVuId()); 
     parseUser.put("studyProgram", user.getStudyProgram()); 
     parseUser.put("facebookId", user.getFacebookId()); 
     parseUser.put("facebookEmail", user.getFacebookEmail()); 
     parseUser.saveInBackground(new SaveCallback() { 
      @Override 
      public void done(ParseException e) { 
       if (e==null){ 
//     Intent i = new Intent(getContext(), StudentDashboardActivity.class); 
////     i.putExtra("E-mail", "abc"); 
//     startActivity(i); 
       } 
       else { 
        Toast temp = Toast.makeText(CourseActivity.this,"Data is not saved.", Toast.LENGTH_SHORT); 
        temp.show(); 
       } 
      } 
     }); 
    } 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     super.onActivityResult(requestCode, resultCode, data); 
     // check if the request code is same as what is passed here it is 4 

     if(requestCode==2) 
     { 
      courseObject = (Course) data.getExtras().getSerializable("SelectedCourse"); 

     } 

    } 
} 

CourseViewAdapter.java

package com.technerdshub.vusocial.Activities; 

import android.content.Context; 
import android.content.Intent; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

import com.technerdshub.vusocial.Models.Course; 
import com.technerdshub.vusocial.Models.StudyProgramModel; 
import com.technerdshub.vusocial.R; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.Locale; 

/** 
* Created by Saroosh on 7/16/2016. 
*/ 
public class CourseViewAdapter extends BaseAdapter { 

    protected CourseActivity courseActivity; 
    Context mContext; 
    LayoutInflater inflater; 
    private List<Course>worldpopulationlist=null; 
    private ArrayList<Course> arraylist; 

    public CourseViewAdapter(Context context, List<Course>worldpopulationlist){ 
     mContext = context; 
     this.worldpopulationlist = worldpopulationlist; 
     inflater = LayoutInflater.from(mContext); 
     this.arraylist = new ArrayList<Course>(); 
     this.arraylist.addAll(worldpopulationlist); 
    } 

    public class ViewHolder { 
     TextView courseCode; 
     TextView courseName; 
    } 

    @Override 
    public int getCount() { 
     return 0; 
    } 

    @Override 
    public Course getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

    public View getView(final int position, View view, ViewGroup parent) { 
     final ViewHolder holder; 
     if (view == null) { 
      holder = new ViewHolder(); 
      view = inflater.inflate(R.layout.c_list_item, null); 
      // Locate the TextViews in listview_item.xml 

      holder.courseName = (TextView) view.findViewById(R.id.course_name); 
      holder.courseCode = (TextView) view.findViewById(R.id.course_code); 
      // holder.duration = (TextView) view.findViewById(R.id.program_duration); 

      view.setTag(holder); 
     } else { 
      holder = (ViewHolder) view.getTag(); 
     } 
     // Set the results into TextViews 
     holder.courseName.setText(worldpopulationlist.get(position).getCourseName()); 

     holder.courseCode.setText(worldpopulationlist.get(position).getCourseCode()); 

     //holder.duration.setText(worldpopulationlist.get(position).getDuration()); 

     view.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 


       // Send single item click data to SingleItemView Class 
       Intent intent = new Intent(mContext, CourseActivity.class); 
       // Pass all data ran 
       intent.putExtra("SelectedCourse", worldpopulationlist.get(position)); 
       // Pass all data country 
       courseActivity.setResult(2,intent); 

       courseActivity.finish(); 
      } 
     }); 

     return view; 
    } 
    // Filter Class 
    public void filter(String charText) { 
     charText = charText.toLowerCase(Locale.getDefault()); 
     worldpopulationlist.clear(); 
     if (charText.length() == 0) { 
      worldpopulationlist.addAll(arraylist); 
     } 
     else 
     { 
      for (Course wp : arraylist) 
      { 
       if (wp.getCourseName().toLowerCase(Locale.getDefault()).contains(charText)) 
       { 
        worldpopulationlist.add(wp); 
       } 
      } 
     } 
     notifyDataSetChanged(); 
    } 
} 

course_activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 

    tools:context=".Activities.CourseActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

    <include 
     android:id="@+id/my_tool_bar" 
     layout="@layout/tool_bar" 
     > 
    </include> 

    </android.support.design.widget.AppBarLayout> 

    <include layout="@layout/content_c" /> 

</android.support.design.widget.CoordinatorLayout> 

c_list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:paddingLeft="4dp" 
    android:paddingRight="4dp" 

    > 

    <TextView 
     android:id="@+id/course_code" 
     android:layout_width="70dp" 
     android:layout_height="70dp" 

     android:paddingTop="10dp" 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp" /> 

    <TextView 
     android:id="@+id/course_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dp" 
     android:layout_toRightOf="@+id/course_code" 
     android:paddingBottom="5dp" 

     android:textColor="#FFFFFF" 
     android:textSize="15sp" /> 



</RelativeLayout> 
+0

Вы получаете ошибку в LogCat? После? – vinoth12594

+1

Когда вы уже создали courselist, то почему вы создаете из него еще один список? –

ответ

1

Вы можете использовать этот код для него, как вам нужно, чтобы вернуть размер в адаптере метода GetCount:

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

@Override 
public Course getItem(int position) { 
    return arraylist.get(position); 
} 
2

Прежде всех getCount() возвращает 0 означает, что вы говорите Adapter, что нет ничего там, попробуйте возвращение arraylist.size()

Кроме того, почему существуют два списка в вашем Adapter?

Edit: Nevermind, это для фильтрации я вижу, а затем попробовать возвращение worldpopulationlist.size()

+0

HM ... это полезно, это хорошо. –

1

Получите ваш worldpopulationlist массив подсчитывать

public int getCount() { 
    return worldpopulationlist.size(); 
} 
0

Удалить эти методы

@Override 
public int getCount() { 
    return 0; 
} 

@Override 
public Course getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

Изменить класс определение

public class CourseViewAdapter extends ArrayAdapter<Course> 

Используйте только один список (есть альтернатива, правильный путь, чтобы применить фильтры к адаптеру)

Context mContext; 
LayoutInflater inflater; 
private List<Course> arraylist; 

public CourseViewAdapter(Context context, ArrayList<Course> list){ 
    super(context, 0, list); 
    mContext = context; 
    inflater = LayoutInflater.from(context); 
    this.arraylist = list; 
} 

Ваша проблема в том, что метод GetCount говорит UI, сколько элементов рисовать. Вы должны осуществить это в BaseAdapter, но ArrayAdapter делает это для вас

0

в вашем XML course_activity.xml вы должны инициализировать ListView

<ListView 
    android:id="@+id/listview1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

В ListView вы должны надуть c_list_item.xml макет.

Я надеюсь, что это сработает для вас.

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