在列表视图上的旋转器 [英] Spinner over listview

查看:79
本文介绍了在列表视图上的旋转器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

无法在微调器中打开下拉细节。



我尝试过:



< pre> package edu.orangecoastcollege.cs273.occcoursefinder; 

import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.Toast;

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

公共类CourseSearchActivity扩展AppCompatActivity {

私有DBHelper db;
private List< Course> allCoursesList;
private List< Offering> allOfferingsList;
private List< Offering> filteredOfferingsList;

私人EditText courseTitleEditText;
私人Spinner ok;
private ListView offeringListView;

private OfferingListAdapter offeringListAdapter;


@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_course_search);

deleteDatabase(DBHelper.DATABASE_NAME);
db = new DBHelper(this);
db.importCoursesFromCSV(courses.csv);

db.importOfferingsFromCSV(offering.csv);

allOfferingsList = db.getAllOfferings();
filteredOfferingsList = new ArrayList<>(allOfferingsList);

allCoursesList = db.getAllCourses();

courseTitleEditText =(EditText)findViewById(R.id.courseTitleEditText);
courseTitleEditText.addTextChangedListener(courseTitleTextWatcher);

ok =(Spinner)findViewById(R.id.ok);


offeringListAdapter = new OfferingListAdapter(this,R.layout.offering_list_item,filteredOfferingsList);

ok.setAdapter(offeringListAdapter);
ArrayAdapter< String> instructorSpinnerAdapter = new ArrayAdapter< String>
(这个,android.R.layout.simple_spinner_item,getAllInstructorNames());
//ok.setAdapter(instructorSpinnerAdapter);
// ok.setOnItemSelectedListener(instructorSpinnerListener);


}
private String [] getAllInstructorNames(){
String [] instructorNames = new String [allCoursesList.size()+ 1];
instructorNames [0] =[选择课程];
for(int i = 1; i< instructorNames.length; i ++){
instructorNames [i] = allCoursesList.get(i - 1).getTitle();
}
return instructorNames;
}

public TextWatcher courseTitleTextWatcher = new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence charSequence,int i,int i1,int i2){

}

@Override
public void onTextChanged(CharSequence charSequence,int i,int i1,int i2){
String input = charSequence.toString( ).toLowerCase();
if(input.equals()){

} else {
String name = ok.getSelectedItem()。toString();
//Toast.makeText(CourseSearchActivity.this,name,Toast.LENGTH_SHORT).show();
offeringListAdapter.clear();
for(提供产品:allOfferingsList){
//如果课程标题以用户输入开头,
//将其添加到listAdapter
课程课程= offering.getCourse( );
if(course.getTitle()。toLowerCase()。contains(input))
offeringListAdapter.add(offering);
}
}
}

@Override
public void afterTextChanged(可编辑的可编辑){


}
};
public AdapterView.OnItemSelectedListener instructorSpinnerListener = new AdapterView.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> adapterView,View view,int i,long l){
String selectedInstructorName = adapterView.getItemAtPosition(i).toString();
if(selectedInstructorName.equals([Select Instructor])){
offeringListAdapter.clear();
for(提供产品:allOfferingsList)
offeringListAdapter.add(offering);
}
else {
offeringListAdapter.clear();

}
}


@Override
public void onNothingSelected(AdapterView<?> adapterView){
adapterView。为setSelection(0);
Toast.makeText(getApplicationContext(),为什么?,Toast.LENGTH_SHORT)。show();
}
};

public void reset(查看视图){
courseTitleEditText.setText();
ok.setSelection(0);
}

}

 package edu.orangecoastcollege.cs273.occcoursefinder; 

/ **
*< code>课程< / code> class代表Orange Coast College的一门课程,
*包括其alpha(例如CS),编号(例如A273)和标题(例如移动应用程序开发)
*
* @author Michael Paulding
* /
公共课程{
private int mId;
private String mAlpha;
private String mNumber;
private String mTitle;

public Course(int id,String alpha,String number,String title){
mId = id;
mAlpha = alpha;
mNumber =数字;
mTitle = title;
}

public课程(String alpha,String number,String title){
this(-1,alpha,number,title);
}

public int getId(){
return mId;
}

public String getAlpha(){
return mAlpha;
}

public void setAlpha(String alpha){
mAlpha = alpha;
}

public String getNumber(){
return mNumber;
}

public String getFullName(){
return mAlpha ++ mNumber;
}

public void setNumber(String number){
mNumber = number;
}

public String getTitle(){
return mTitle;
}

public void setTitle(String title){
mTitle = title;
}

@Override
public String toString(){
returnCourse {+
Id =+ mId +
,Alpha ='+ mAlpha +'\''+
,Number ='+ mNumber +'\''+
,Title ='+ mTitle +'\ ''+
'}';
}
}

 package edu.orangecoastcollege.cs273.occcoursefinder; 

import android.content.ContentValues;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;

class DBHelper扩展SQLiteOpenHelper {

private Context mContext;

//任务:定义数据库版本和名称(数据库包含多个表格)
static final String DATABASE_NAME =OCC;
private static final int DATABASE_VERSION = 1;

//任务:定义课程表的字段(列名)
public static final String COURSES_TABLE =Courses;
public static final String COURSES_KEY_FIELD_ID =_ id;
public static final String FIELD_ALPHA =alpha;
public static final String FIELD_NUMBER =number;
public static final String FIELD_TITLE =title;

//任务:为讲师定义领域(栏目名称)


//任务:定义领域表的领域(栏目名称)
private static final String OFFERINGS_TABLE =Offerings;
private static final String OFFERINGS_KEY_FIELD_ID =crn;
private static final String FIELD_SEMESTER_CODE =semester_code;
public static final String FIELD_COURSE_ID =course_id;

public DBHelper(Context context){
super(context,DATABASE_NAME,null,DATABASE_VERSION);
mContext = context;
}

@Override
public void onCreate(SQLiteDatabase数据库){
String createQuery =CREATE TABLE+ COURSES_TABLE +(
+ COURSES_KEY_FIELD_ID +INTEGER PRIMARY KEY AUTOINCREMENT,
+ FIELD_ALPHA +TEXT,
+ FIELD_NUMBER +TEXT,
+ FIELD_TITLE +TEXT+);
database.execSQL(createQuery);



createQuery =CREATE TABLE+ OFFERINGS_TABLE +(
+ OFFERINGS_KEY_FIELD_ID +INTEGER PRIMARY KEY AUTOINCREMENT,
+ FIELD_SEMESTER_CODE + INTEGER,
+ FIELD_COURSE_ID +INTEGER,

+FOREIGN KEY(+ FIELD_COURSE_ID +)REFERENCES

+ COURSES_TABLE +(+ COURSES_KEY_FIELD_ID +)+
);
database.execSQL(createQuery);
}

@Override
public void onUpgrade(SQLiteDatabase数据库,
int oldVersion,
int newVersion){
database.execSQL( DROP TABLE IF EXISTS+ COURSES_TABLE;

database.execSQL(DROP TABLE IF EXISTS+ OFFERINGS_TABLE);
onCreate(数据库);
}

// **********课程表操作:ADD,GETALL,EDIT,DELETE

public void addCourse(课程课程) ){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();

values.put(FIELD_ALPHA,course.getAlpha());
values.put(FIELD_NUMBER,course.getNumber());
values.put(FIELD_TITLE,course.getTitle());

db.insert(COURSES_TABLE,null,values);

//关闭数据库连接
db.close();
}

public ArrayList< Course> getAllCourses(){
ArrayList< Course> coursesList = new ArrayList<>();
SQLiteDatabase database = this.getReadableDatabase();
//光标游标= database.rawQuery(queryList,null);
Cursor cursor = database.query(
COURSES_TABLE,
new String [] {COURSES_KEY_FIELD_ID,FIELD_ALPHA,FIELD_NUMBER,FIELD_TITLE},
null,
null,
null,null,null,null);

//收集表中的每一行
if(cursor.moveToFirst()){
do {
course course =
new course(cursor) .getInt(0),
cursor.getString(1),
cursor.getString(2),
cursor.getString(3));
coursesList.add(课程);
} while(cursor.moveToNext());
}
return coursesList;
}

public void deleteCourse(课程){
SQLiteDatabase db = this.getWritableDatabase();

// DELETE THE TABLE ROW
db.delete(COURSES_TABLE,COURSES_KEY_FIELD_ID +=?,
new String [] {String.valueOf(course.getId()) });
db.close();
}

public void deleteAllCourses(){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(COURSES_TABLE,null,null);
db.close();
}

public void updateCourse(课程){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();

values.put(FIELD_ALPHA,course.getAlpha());
values.put(FIELD_NUMBER,course.getNumber());
values.put(FIELD_TITLE,course.getTitle());

db.update(COURSES_TABLE,values,COURSES_KEY_FIELD_ID +=?,
new String [] {String.valueOf(course.getId())});
db.close();
}

public课程getCourse(int id){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(
COURSES_TABLE,
new String [] {COURSES_KEY_FIELD_ID,FIELD_ALPHA,FIELD_NUMBER,FIELD_TITLE},
COURSES_KEY_FIELD_ID +=?,
new String [] {String.valueOf(id)},
null,null,null,null);

if(cursor!= null)
cursor.moveToFirst();

课程课程=新课程(
cursor.getInt(0),
cursor.getString(1),
cursor.getString(2),
cursor.getString(3));

db.close();
返回课程;
}




// **********提供表操作:ADD,GETALL,EDIT,DELETE

public void addOffering(int crn,int semesterCode,int courseId){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();

values.put(OFFERINGS_KEY_FIELD_ID,crn);
values.put(FIELD_SEMESTER_CODE,semesterCode);
values.put(FIELD_COURSE_ID,courseId);


db.insert(OFFERINGS_TABLE,null,values);

//关闭数据库连接
db.close();
}

public ArrayList< Offering> getAllOfferings(){
ArrayList< Offering> offeringList = new ArrayList<>();
SQLiteDatabase database = this.getReadableDatabase();
//光标游标= database.rawQuery(queryList,null);
Cursor cursor = database.query(
OFFERINGS_TABLE,
new String [] {OFFERINGS_KEY_FIELD_ID,FIELD_SEMESTER_CODE,FIELD_COURSE_ID},
null,
null,
null ,null,null,null);

//收集表中的每一行
if(cursor.moveToFirst()){
do {
Course course = getCourse(cursor.getInt(2) );
//讲师讲师= getInstructor(cursor.getInt(3));
提供产品=新产品(cursor.getInt(0),
cursor.getInt(1),course);

offeringList.add(offer);
} while(cursor.moveToNext());
}
return offeringList;
}

public void deleteOffering(提供产品){
SQLiteDatabase db = this.getWritableDatabase();

//删除表行
db.delete(OFFERINGS_TABLE,OFFERINGS_KEY_FIELD_ID +=?,
new String [] {String.valueOf(offering.getCRN()) });
db.close();
}

public void deleteAllOfferings(){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(OFFERINGS_TABLE,null,null);
db.close();
}

public void updateOffering(提供产品){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();

values.put(FIELD_SEMESTER_CODE,offering.getSemesterCode());
values.put(FIELD_COURSE_ID,offering.getCourse()。getId());


db.update(OFFERINGS_TABLE,values,OFFERINGS_KEY_FIELD_ID +=?,
new String [] {String.valueOf(offering.getCRN())});
db.close();
}

公开提供getOffering(int crn){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(
OFFERINGS_TABLE,
new String [] {OFFERINGS_KEY_FIELD_ID,FIELD_SEMESTER_CODE,FIELD_COURSE_ID},
OFFERINGS_KEY_FIELD_ID +=?,
new String [] {String.valueOf(crn)},
null,null,null,null);

if(cursor!= null)
cursor.moveToFirst();

课程课程= getCourse(cursor.getInt(2));
//讲师讲师= getInstructor(cursor.getInt(3));
提供产品=新产品(cursor.getInt(0),
cursor.getInt(1),course);


db.close();
退货;
}

public Cursor getAllLabelsAsCursor(){
String [] columns = new String [] {rowid AS _id,*}; //需要SimpleCursorAdapter的_id列
返回this.getWritableDatabase()。query(COURSES_TABLE,columns,null,null,null,null,null);
}



public boolean importCoursesFromCSV(String csvFileName){
AssetManager manager = mContext.getAssets();
InputStream inStream;
try {
inStream = manager.open(csvFileName);
} catch(IOException e){
e.printStackTrace();
返回false;
}

BufferedReader buffer = new BufferedReader(new InputStreamReader(inStream));
字符串行;
try {
while((line = buffer.readLine())!= null){
String [] fields = line.split(,);
if(fields.length!= 4){
Log.d(OCC Course Finder,跳过错误的CSV行:+ Arrays.toString(fields));
继续;
}
int id = Integer.parseInt(fields [0] .trim());
String alpha = fields [1] .trim();
String number = fields [2] .trim();
String title = fields [3] .trim();
addCourse(新课程(id,alpha,number,title));
}
} catch(IOException e){
e.printStackTrace();
返回false;
}
返回true;
}



public boolean importOfferingsFromCSV(String csvFileName){
AssetManager am = mContext.getAssets();
InputStream inStream = null;
try {
inStream = am.open(csvFileName);
} catch(IOException e){
e.printStackTrace();
}

BufferedReader buffer = new BufferedReader(new InputStreamReader(inStream));
字符串行;
try {
while((line = buffer.readLine())!= null){
String [] fields = line.split(,);
if(fields.length!= 4){
Log.d(OCC Course Finder,跳过错误的CSV行:+ Arrays.toString(fields));
继续;
}
int crn = Integer.parseInt(fields [0] .trim());
int semesterCode = Integer.parseInt(fields [1] .trim());
int courseId = Integer.parseInt(fields [2] .trim());

addOffering(crn,semesterCode,courseId);
}
} catch(IOException e){
e.printStackTrace();
返回false;
}
返回true;
}
}

 package edu.orangecoastcollege.cs273.occcoursefinder; 

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Spinner;
import java.util.ArrayList;
import java.util.List;

/ **
* Helper类为< code>提供< / code>提供自定义适配器名单。
* /
public class OfferingListAdapter extends ArrayAdapter< Offering> {

private Context mContext;
private List< Offering> mOfferingsList = new ArrayList<>();
private int mResourceId;

/ **
*创建一个新的< code> OfferingListAdapter< / code>给出mContext,资源ID和产品列表。
*
* @param c正在使用适配器的mContext(通常是一个活动)
* @param rId资源ID(通常是布局文件名)
* @param offering要显示的产品列表
* /
public OfferingListAdapter(Context c,int rId,List< Offering>产品){
super(c,rId,offering);
mContext = c;
mResourceId = rId;
mOfferingsList =产品;
}

/ **
*获取与布局关联的视图。
* @param pos列表中所选产品的位置。
* @param convertView转换后的视图。
* @param parent父级 - ArrayAdapter
* @return包含所有内容的新视图。
* /

@Override
public View getView(int pos,View convertView,ViewGroup parent)
{
final Offering selectedOffering = mOfferingsList.get( POS);
final课程selectedCourse = selectedOffering.getCourse();


LayoutInflater inflater =(LayoutInflater)mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
查看视图= inflater.inflate(mResourceId,null);
// LinearLayout offeringListLinearLayout =(LinearLayout)view.findViewById(R.id.offeringListLinearLayout);
TextView offeringListFullNameTextView =(TextView)view.findViewById(R.id.offeringListFullNameTextView);
Spinner spinner =(Spinner)convertView.findViewById(R.id.ok);
// TextView offeringListTitleTextView =(TextView)view.findViewById(R.id.offeringListTitleTextView);
// TextView offeringListCrnTextView =(TextView)view.findViewById(R.id.offeringListCrnTextView);

// TODO:引用offeringListCRNTextView并相应地设置文本。

// offeringListLinearLayout.setTag(selectedOffering);
offeringListFullNameTextView.setText(selectedCourse.getTitle());

// offeringListCrnTextView.setText(String.valueOf(selectedOffering.getCRN()));

String [] colors = {Red,Green,Blue};




返回视图;
}
}

 package edu.orangecoastcollege.cs273.occcoursefinder; 

/ **
*< code>提供< / code> class代表Orange Coast College的单一课程,
*包括其CRN(课程注册号),学期代码(带年份的数字和
*学期),< code>课程< /代码>它被映射到< code>讲师< / code>教学
*这个课程的提供。
*
* @author Michael Paulding
* /
公共类提供{
private int mCRN;
private int mSemesterCode;
私人课程mCourse;


公开发售(int CRN,int semesterCode,课程){
mCRN = CRN;
mSemesterCode = semesterCode;
mCourse = course;

}

公开发售(int semesterCode,课程){
mSemesterCode = semesterCode;
mCourse = course;
}

public int getCRN(){
return mCRN;
}

public int getSemesterCode(){
return mSemesterCode;
}

public String getSemesterName(){
switch(mSemesterCode)
{
case 201731:
return2017年秋季;
默认值:
返回;
}
}
public void setSemesterCode(int semesterCode){
mSemesterCode = semesterCode;
}

public course getCourse(){
return mCourse;
}

public void setCourse(课程){
mCourse = course;
}


@Override
public String toString(){
returnOffering {+
CRN =+ mCRN +
,SemesterCode =+ mSemesterCode +
,Course =+ mCourse +

'}';
}
}

  04   -   11   14  52  59 . 657   8011  -8011 / edu.orangecoastcollege.cs273.occcoursefinder E / AndroidRuntime:FATAL EXCEPTION :main 
进程:edu.orangecoastcollege.cs273.occcoursefinder,PID: 8011
java.lang.IllegalStateException:找不到方法viewOfferingDetails(查看)在父或祖先上下文 for android:onClick属性在视图 class android.widget.LinearLayout上定义id ' offeringListLinearLayout'
在android.view.View $ DeclaredOnClickListener.resolveMethod(View.java) : 4757
在android。 view.View $ DeclaredOnClickListener.onClick(View.java: 4716
在android.view.View.performClick(View.java: 5637
在android.view.View $ PerformClick.run(View.java: 22429
在android.os.Handler.handleCallback(Handler.java: 751
在android.os.Handler.dispatchMessage(Handler.java: 95
在android.os.Looper.loop(Looper.java: 154
at android.app.ActivityThread.main(ActivityThread.java: 6119
at java.lang.reflect.Method.invoke(Native Method)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java: 886
at com.android.internal.os.ZygoteInit。 main(ZygoteInit.java: 776

解决方案

DeclaredOnClickListener.resolveMethod(View.java: 4757
在android.view.View


DeclaredOnClickListener.onClick(View.java: 4716
在android.view.View.performClick(View.java: 5637
在android.view.View


PerformClick.run(View.java: 22429
在android.os.Handler.handleCallback(Handler.java: 751
在android.os .Handler.dispatchMessage(Handler.java: 95
在android.os.Looper.loop(Looper.java: 154
在android.app.ActivityThread.main(ActivityThread.java: 6119
at java.lang。 reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit

Unable to open the drop down details in spinner.

What I have tried:

<pre>package edu.orangecoastcollege.cs273.occcoursefinder;

import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.Toast;

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

public class CourseSearchActivity extends AppCompatActivity  {

    private DBHelper db;
    private List<Course> allCoursesList;
    private List<Offering> allOfferingsList;
    private List<Offering> filteredOfferingsList;

    private EditText courseTitleEditText;
    private Spinner ok;
    private ListView offeringsListView;

    private OfferingListAdapter offeringListAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_course_search);

        deleteDatabase(DBHelper.DATABASE_NAME);
        db = new DBHelper(this);
        db.importCoursesFromCSV("courses.csv");

        db.importOfferingsFromCSV("offerings.csv");

        allOfferingsList = db.getAllOfferings();
        filteredOfferingsList = new ArrayList<>(allOfferingsList);

        allCoursesList = db.getAllCourses();

        courseTitleEditText = (EditText) findViewById(R.id.courseTitleEditText);
        courseTitleEditText.addTextChangedListener(courseTitleTextWatcher);

        ok = (Spinner) findViewById(R.id.ok);


        offeringListAdapter = new OfferingListAdapter(this, R.layout.offering_list_item, filteredOfferingsList);

        ok.setAdapter(offeringListAdapter);
        ArrayAdapter<String> instructorSpinnerAdapter = new ArrayAdapter<String>
                (this, android.R.layout.simple_spinner_item, getAllInstructorNames());
       //ok.setAdapter(instructorSpinnerAdapter);
      // ok.setOnItemSelectedListener(instructorSpinnerListener);


    }
    private String[] getAllInstructorNames(){
        String[] instructorNames = new String[allCoursesList.size() + 1];
        instructorNames[0] = "[Select Course]";
        for(int i = 1; i < instructorNames.length; i++){
            instructorNames[i] = allCoursesList.get(i - 1).getTitle();
        }
        return instructorNames;
    }

    public TextWatcher courseTitleTextWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            String input = charSequence.toString().toLowerCase();
            if (input.equals("")) {

            } else {
                String name = ok.getSelectedItem().toString();
                //Toast.makeText(CourseSearchActivity.this, name, Toast.LENGTH_SHORT).show();
               offeringListAdapter.clear();
                for (Offering offering : allOfferingsList) {
                    // If the course title starts with the user input,
                    // add it to the listAdapter
                   Course course = offering.getCourse();
                    if (course.getTitle().toLowerCase().contains(input))
                        offeringListAdapter.add(offering);
                }
            }
        }

        @Override
        public void afterTextChanged(Editable editable) {


        }
    };
    public AdapterView.OnItemSelectedListener instructorSpinnerListener = new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            String selectedInstructorName = adapterView.getItemAtPosition(i).toString();
            if(selectedInstructorName.equals("[Select Instructor]")){
                offeringListAdapter.clear();
                for (Offering offering : allOfferingsList)
                    offeringListAdapter.add(offering);
            }
            else{
                offeringListAdapter.clear();

                }
            }


        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {
            adapterView.setSelection(0);
            Toast.makeText(getApplicationContext(), "Why?", Toast.LENGTH_SHORT).show();
        }
    };

    public void reset(View view){
        courseTitleEditText.setText("");
        ok.setSelection(0);
    }

}

package edu.orangecoastcollege.cs273.occcoursefinder;

/**
 * The <code>Course</code> class represents a single course at Orange Coast College,
 * including its alpha (e.g. CS), number (e.g. A273) and title (e.g. Mobile Application Development)
 *
 * @author Michael Paulding
 */
public class Course {
    private int mId;
    private String mAlpha;
    private String mNumber;
    private String mTitle;

    public Course(int id, String alpha, String number, String title) {
        mId = id;
        mAlpha = alpha;
        mNumber = number;
        mTitle = title;
    }

    public Course(String alpha, String number, String title) {
        this(-1, alpha, number, title);
    }

    public int getId() {
        return mId;
    }

    public String getAlpha() {
        return mAlpha;
    }

    public void setAlpha(String alpha) {
        mAlpha = alpha;
    }

    public String getNumber() {
        return mNumber;
    }

    public String getFullName() {
        return mAlpha + " " + mNumber;
    }

    public void setNumber(String number) {
        mNumber = number;
    }

    public String getTitle() {
        return mTitle;
    }

    public void setTitle(String title) {
        mTitle = title;
    }

    @Override
    public String toString() {
        return "Course{" +
                "Id=" + mId +
                ", Alpha='" + mAlpha + '\'' +
                ", Number='" + mNumber + '\'' +
                ", Title='" + mTitle + '\'' +
                '}';
    }
}

package edu.orangecoastcollege.cs273.occcoursefinder;

import android.content.ContentValues;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;

class DBHelper extends SQLiteOpenHelper {

    private Context mContext;

    //TASK: DEFINE THE DATABASE VERSION AND NAME  (DATABASE CONTAINS MULTIPLE TABLES)
    static final String DATABASE_NAME = "OCC";
    private static final int DATABASE_VERSION = 1;

    //TASK: DEFINE THE FIELDS (COLUMN NAMES) FOR THE COURSES TABLE
    public static final String COURSES_TABLE = "Courses";
    public static final String COURSES_KEY_FIELD_ID = "_id";
    public static final String FIELD_ALPHA = "alpha";
    public static final String FIELD_NUMBER = "number";
    public static final String FIELD_TITLE = "title";

    //TASK: DEFINE THE FIELDS (COLUMN NAMES) FOR THE INSTRUCTORS TABLE


    //TASK: DEFINE THE FIELDS (COLUMN NAMES) FOR THE OFFERINGS TABLE
    private static final String OFFERINGS_TABLE = "Offerings";
    private static final String OFFERINGS_KEY_FIELD_ID = "crn";
    private static final String FIELD_SEMESTER_CODE = "semester_code";
    public static final String FIELD_COURSE_ID = "course_id";

    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        mContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase database) {
        String createQuery = "CREATE TABLE " + COURSES_TABLE + "("
                + COURSES_KEY_FIELD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                + FIELD_ALPHA + " TEXT, "
                + FIELD_NUMBER + " TEXT, "
                + FIELD_TITLE + " TEXT" + ")";
        database.execSQL(createQuery);



        createQuery = "CREATE TABLE " + OFFERINGS_TABLE + "("
                + OFFERINGS_KEY_FIELD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                + FIELD_SEMESTER_CODE + " INTEGER, "
                + FIELD_COURSE_ID + " INTEGER, "

                + "FOREIGN KEY(" + FIELD_COURSE_ID + ") REFERENCES "

                +  COURSES_TABLE + "(" + COURSES_KEY_FIELD_ID + ")" +
                ")";
        database.execSQL(createQuery);
    }

    @Override
    public void onUpgrade(SQLiteDatabase database,
                          int oldVersion,
                          int newVersion) {
        database.execSQL("DROP TABLE IF EXISTS " + COURSES_TABLE);

        database.execSQL("DROP TABLE IF EXISTS " + OFFERINGS_TABLE);
        onCreate(database);
    }

    //********** COURSE TABLE OPERATIONS:  ADD, GETALL, EDIT, DELETE

    public void addCourse(Course course) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();

        values.put(FIELD_ALPHA, course.getAlpha());
        values.put(FIELD_NUMBER, course.getNumber());
        values.put(FIELD_TITLE, course.getTitle());

        db.insert(COURSES_TABLE, null, values);

        // CLOSE THE DATABASE CONNECTION
        db.close();
    }

    public ArrayList<Course> getAllCourses() {
        ArrayList<Course> coursesList = new ArrayList<>();
        SQLiteDatabase database = this.getReadableDatabase();
        //Cursor cursor = database.rawQuery(queryList, null);
        Cursor cursor = database.query(
                COURSES_TABLE,
                new String[]{COURSES_KEY_FIELD_ID, FIELD_ALPHA, FIELD_NUMBER, FIELD_TITLE},
                null,
                null,
                null, null, null, null);

        //COLLECT EACH ROW IN THE TABLE
        if (cursor.moveToFirst()) {
            do {
                Course course =
                        new Course(cursor.getInt(0),
                                cursor.getString(1),
                                cursor.getString(2),
                                cursor.getString(3));
                coursesList.add(course);
            } while (cursor.moveToNext());
        }
        return coursesList;
    }

    public void deleteCourse(Course course) {
        SQLiteDatabase db = this.getWritableDatabase();

        // DELETE THE TABLE ROW
        db.delete(COURSES_TABLE, COURSES_KEY_FIELD_ID + " = ?",
                new String[]{String.valueOf(course.getId())});
        db.close();
    }

    public void deleteAllCourses() {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(COURSES_TABLE, null, null);
        db.close();
    }

    public void updateCourse(Course course) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();

        values.put(FIELD_ALPHA, course.getAlpha());
        values.put(FIELD_NUMBER, course.getNumber());
        values.put(FIELD_TITLE, course.getTitle());

        db.update(COURSES_TABLE, values, COURSES_KEY_FIELD_ID + " = ?",
                new String[]{String.valueOf(course.getId())});
        db.close();
    }

    public Course getCourse(int id) {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.query(
                COURSES_TABLE,
                new String[]{COURSES_KEY_FIELD_ID, FIELD_ALPHA, FIELD_NUMBER, FIELD_TITLE},
                COURSES_KEY_FIELD_ID + "=?",
                new String[]{String.valueOf(id)},
                null, null, null, null);

        if (cursor != null)
            cursor.moveToFirst();

        Course course = new Course(
                cursor.getInt(0),
                cursor.getString(1),
                cursor.getString(2),
                cursor.getString(3));

        db.close();
        return course;
    }




    //********** OFFERING TABLE OPERATIONS:  ADD, GETALL, EDIT, DELETE

    public void addOffering(int crn, int semesterCode, int courseId) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();

        values.put(OFFERINGS_KEY_FIELD_ID, crn);
        values.put(FIELD_SEMESTER_CODE, semesterCode);
        values.put(FIELD_COURSE_ID, courseId);


        db.insert(OFFERINGS_TABLE, null, values);

        // CLOSE THE DATABASE CONNECTION
        db.close();
    }

    public ArrayList<Offering> getAllOfferings() {
        ArrayList<Offering> offeringsList = new ArrayList<>();
        SQLiteDatabase database = this.getReadableDatabase();
        //Cursor cursor = database.rawQuery(queryList, null);
        Cursor cursor = database.query(
                OFFERINGS_TABLE,
                new String[]{OFFERINGS_KEY_FIELD_ID, FIELD_SEMESTER_CODE, FIELD_COURSE_ID},
                null,
                null,
                null, null, null, null);

        //COLLECT EACH ROW IN THE TABLE
        if (cursor.moveToFirst()) {
            do {
                Course course = getCourse(cursor.getInt(2));
                //Instructor instructor = getInstructor(cursor.getInt(3));
                Offering offering = new Offering(cursor.getInt(0),
                        cursor.getInt(1), course);

                offeringsList.add(offering);
            } while (cursor.moveToNext());
        }
        return offeringsList;
    }

    public void deleteOffering(Offering offering) {
        SQLiteDatabase db = this.getWritableDatabase();

        // DELETE THE TABLE ROW
        db.delete(OFFERINGS_TABLE, OFFERINGS_KEY_FIELD_ID + " = ?",
                new String[]{String.valueOf(offering.getCRN())});
        db.close();
    }

    public void deleteAllOfferings() {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(OFFERINGS_TABLE, null, null);
        db.close();
    }

    public void updateOffering(Offering offering) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();

        values.put(FIELD_SEMESTER_CODE, offering.getSemesterCode());
        values.put(FIELD_COURSE_ID, offering.getCourse().getId());


        db.update(OFFERINGS_TABLE, values, OFFERINGS_KEY_FIELD_ID + " = ?",
                new String[]{String.valueOf(offering.getCRN())});
        db.close();
    }

    public Offering getOffering(int crn) {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.query(
                OFFERINGS_TABLE,
                new String[]{OFFERINGS_KEY_FIELD_ID, FIELD_SEMESTER_CODE, FIELD_COURSE_ID},
                OFFERINGS_KEY_FIELD_ID + "=?",
                new String[]{String.valueOf(crn)},
                null, null, null, null);

        if (cursor != null)
            cursor.moveToFirst();

        Course course = getCourse(cursor.getInt(2));
        //Instructor instructor = getInstructor(cursor.getInt(3));
        Offering offering = new Offering(cursor.getInt(0),
                cursor.getInt(1), course);


        db.close();
        return offering;
    }

    public Cursor getAllLabelsAsCursor() {
        String[] columns = new String[]{"rowid AS _id, *"}; // Need _id column for SimpleCursorAdapter
        return this.getWritableDatabase().query(COURSES_TABLE,columns,null,null,null,null,null);
    }



    public boolean importCoursesFromCSV(String csvFileName) {
        AssetManager manager = mContext.getAssets();
        InputStream inStream;
        try {
            inStream = manager.open(csvFileName);
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }

        BufferedReader buffer = new BufferedReader(new InputStreamReader(inStream));
        String line;
        try {
            while ((line = buffer.readLine()) != null) {
                String[] fields = line.split(",");
                if (fields.length != 4) {
                    Log.d("OCC Course Finder", "Skipping Bad CSV Row: " + Arrays.toString(fields));
                    continue;
                }
                int id = Integer.parseInt(fields[0].trim());
                String alpha = fields[1].trim();
                String number = fields[2].trim();
                String title = fields[3].trim();
                addCourse(new Course(id, alpha, number, title));
            }
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }



    public boolean importOfferingsFromCSV(String csvFileName) {
        AssetManager am = mContext.getAssets();
        InputStream inStream = null;
        try {
            inStream = am.open(csvFileName);
        } catch (IOException e) {
            e.printStackTrace();
        }

        BufferedReader buffer = new BufferedReader(new InputStreamReader(inStream));
        String line;
        try {
            while ((line = buffer.readLine()) != null) {
                String[] fields = line.split(",");
                if (fields.length != 4) {
                    Log.d("OCC Course Finder", "Skipping Bad CSV Row: " + Arrays.toString(fields));
                    continue;
                }
                int crn = Integer.parseInt(fields[0].trim());
                int semesterCode = Integer.parseInt(fields[1].trim());
                int courseId = Integer.parseInt(fields[2].trim());

                addOffering(crn, semesterCode, courseId);
            }
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
}

package edu.orangecoastcollege.cs273.occcoursefinder;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Spinner;
import java.util.ArrayList;
import java.util.List;

/**
 * Helper class to provide custom adapter for the <code>Offering</code> list.
 */
public class OfferingListAdapter extends ArrayAdapter<Offering> {

    private Context mContext;
    private List<Offering> mOfferingsList = new ArrayList<>();
    private int mResourceId;

    /**
     * Creates a new <code>OfferingListAdapter</code> given a mContext, resource id and list of offerings.
     *
     * @param c The mContext for which the adapter is being used (typically an activity)
     * @param rId The resource id (typically the layout file name)
     * @param offerings The list of offerings to display
     */
    public OfferingListAdapter(Context c, int rId, List<Offering> offerings) {
        super(c, rId, offerings);
        mContext = c;
        mResourceId = rId;
        mOfferingsList = offerings;
    }

    /**
     * Gets the view associated with the layout.
     * @param pos The position of the Offering selected in the list.
     * @param convertView The converted view.
     * @param parent The parent - ArrayAdapter
     * @return The new view with all content set.
     */

    @Override
    public View getView(int pos, View convertView, ViewGroup parent)
    {
        final Offering selectedOffering = mOfferingsList.get(pos);
        final Course selectedCourse = selectedOffering.getCourse();


        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(mResourceId, null);
      //  LinearLayout offeringListLinearLayout = (LinearLayout) view.findViewById(R.id.offeringListLinearLayout);
        TextView offeringListFullNameTextView = (TextView) view.findViewById(R.id.offeringListFullNameTextView);
        Spinner spinner=(Spinner) convertView.findViewById(R.id.ok);
       // TextView offeringListTitleTextView = (TextView) view.findViewById(R.id.offeringListTitleTextView);
        //TextView offeringListCrnTextView = (TextView) view.findViewById(R.id.offeringListCrnTextView);

        //TODO:  Make a reference to the offeringListCRNTextView and set the text accordingly.

       // offeringListLinearLayout.setTag(selectedOffering);
        offeringListFullNameTextView.setText( selectedCourse.getTitle());

       // offeringListCrnTextView.setText(String.valueOf(selectedOffering.getCRN()));

        String[] colors={"Red","Green","Blue"};




        return view;
    }
}

package edu.orangecoastcollege.cs273.occcoursefinder;

/**
 * The <code>Offering</code> class represents a single course offering at Orange Coast College,
 * including its CRN (course registration number), semester code (a number with the year and
 * semester), the <code>Course</code> it is mapped to and the <code>Instructor</code> teaching
 * this offering of the course.
 *
 * @author Michael Paulding
 */
public class Offering {
    private int mCRN;
    private int mSemesterCode;
    private Course mCourse;


    public Offering(int CRN, int semesterCode, Course course) {
        mCRN = CRN;
        mSemesterCode = semesterCode;
        mCourse = course;

    }

    public Offering(int semesterCode, Course course) {
        mSemesterCode = semesterCode;
        mCourse = course;
    }

    public int getCRN() {
        return mCRN;
    }

    public int getSemesterCode() {
        return mSemesterCode;
    }

    public String getSemesterName() {
        switch (mSemesterCode)
        {
            case 201731:
                return "Fall 2017";
            default:
                return "";
        }
    }
    public void setSemesterCode(int semesterCode) {
        mSemesterCode = semesterCode;
    }

    public Course getCourse() {
        return mCourse;
    }

    public void setCourse(Course course) {
        mCourse = course;
    }


    @Override
    public String toString() {
        return "Offering{" +
                "CRN=" + mCRN +
                ", SemesterCode=" + mSemesterCode +
                ", Course=" + mCourse +

                '}';
    }
}

04-11 14:52:59.657 8011-8011/edu.orangecoastcollege.cs273.occcoursefinder E/AndroidRuntime: FATAL EXCEPTION: main
    Process: edu.orangecoastcollege.cs273.occcoursefinder, PID: 8011
    java.lang.IllegalStateException: Could not find method viewOfferingDetails(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.widget.LinearLayout with id 'offeringListLinearLayout'
        at android.view.View$DeclaredOnClickListener.resolveMethod(View.java:4757)
        at android.view.View$DeclaredOnClickListener.onClick(View.java:4716)
        at android.view.View.performClick(View.java:5637)
        at android.view.View$PerformClick.run(View.java:22429)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

解决方案

DeclaredOnClickListener.resolveMethod(View.java:4757) at android.view.View


DeclaredOnClickListener.onClick(View.java:4716) at android.view.View.performClick(View.java:5637) at android.view.View


PerformClick.run(View.java:22429) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit


这篇关于在列表视图上的旋转器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆