我无法从ListView

时间:2016-08-10 12:41:10

标签: listview view adapter onitemclicklistener

我有这个问题好像2天了,而且我是STUCK。我正在制作一个由类和学生输入组成的类记录器应用程序。我已经将列的布局用于listview:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="75dp"
    android:orientation="horizontal"
    android:gravity="center|center_horizontal"
    android:clickable="true">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text=" 3"
        android:id="@+id/cl_id"
        android:layout_weight="1"
        android:layout_marginLeft="10dp"
        android:clickable="true" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="English"
        android:id="@+id/cl_name"
        android:layout_weight="1"
        android:clickable="true" />
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/img_edit"
        android:background="@drawable/ic_edit"
        android:layout_alignParentBottom="true"
        android:layout_toRightOf="@+id/textView9"
        android:layout_toEndOf="@+id/textView9"
        android:layout_marginLeft="44dp"
        android:layout_marginStart="44dp"
        android:onClick="clickedit"
        android:clickable="false" />
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/img_erase"
        android:background="@drawable/ic_oie_transparent"
        android:layout_alignTop="@+id/imageView2"
        android:layout_toRightOf="@+id/imageView2"
        android:layout_toEndOf="@+id/imageView2"
        android:onClick="clickremove"
        android:clickable="false"
        android:adjustViewBounds="false" />
    ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView3"
        android:background="@drawable/ic_oie_transparent"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginRight="40dp"
        android:layout_marginEnd="40dp" />
</LinearLayout>

以下是图片:LISTVIEW ROW LAYOUT

我的应用程序已经可以从数据库中填充列表视图

以下是一个示例:DATA POPULATED LISTVIEW

现在的问题是,当我使用OnItemClickListener方法时,我无法从列表中单击或获取任何值。我已经尝试过来自互联网的TONS教程,例如youtube和这个网站。但我仍然没有找到任何解决方案,因为我在寻找解决方案时,我会不时地疯狂

我的听众的目的是访问不同的教室(点击列表中的项目),然后我可以添加学生等。

以下是我班级的代码;

1。)classroom.class&lt;&lt;列表视图的位置

    package com.example.techport.professorsboard;
    import android.content.Intent;
    import android.database.Cursor;
    import android.graphics.Typeface;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.Toolbar;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;
    import org.w3c.dom.Text;
    import java.util.List;
    public class classroom extends AppCompatActivity {
        ListView mylistview;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_classroom);
            account a = new account();
            Typeface typeface = Typeface.createFromAsset(getAssets(),"SqueakyChalkSound.ttf");
            TextView id = (TextView)findViewById(R.id.txt_id);
            final TextView classname = (TextView)findViewById(R.id.txt_classname);
            id.setTypeface(typeface,Typeface.BOLD);
            classname.setTypeface(typeface,Typeface.BOLD);
            String subtitle="ID: "+a.getID()+" Email: "+a.getEmail();
            final Toolbar classroom_toolbar = (Toolbar) findViewById(R.id.classroom_toolbar);
            setSupportActionBar(classroom_toolbar);
            getSupportActionBar().setTitle(a.getUsername());
            getSupportActionBar().setSubtitle(subtitle);
            getSupportActionBar().setIcon(R.mipmap.ic_launcher);
            backgroundtask backgroundtask = new backgroundtask(this);
    backgroundtask.execute("get_info");


//BELOW HERE ARE THE CODES I USED FOR SEETING THE ONCLICKLISTENER

            ListView mylist = (ListView)findViewById(R.id.display_listvew);
            mylist.setOnItemClickListener(new AdapterView.OnItemClickListener()
            {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                    String class_id = ((TextView)view.findViewById(R.id.cl_id)).getText().toString();
                    String class_name = ((TextView)view.findViewById(R.id.cl_name)).getText().toString();

                    Toast.makeText(getBaseContext(),class_id+class_name,Toast.LENGTH_SHORT).show();
                }
            });
        }

//ABOVE HERE ARE THE CODES I USED FOR SEETING THE ONCLICKLISTENER 



        public boolean onCreateOptionsMenu(Menu menu){
            getMenuInflater().inflate(R.menu.main_menu,menu);
            return super.onCreateOptionsMenu(menu);
        }
        public boolean onOptionsItemSelected (MenuItem item){
            switch(item.getItemId()){
                case R.id.menu_1:
                    Intent ClassroomTOAddclass = new Intent(classroom.this,addclass.class);
                    startActivity(ClassroomTOAddclass);
                    break;
                case R.id.menu_2:
                    Intent ClassroomTOMain = new Intent(classroom.this,MainActivity.class);
                    startActivity(ClassroomTOMain);
                    Toast logout = Toast.makeText(classroom.this,"Logout session successful!",Toast.LENGTH_SHORT);
                    finish();
                    logout.show();
                    break;
            }
            return super.onOptionsItemSelected(item);
        }
    }

2。)backgroundtask&lt;&lt;负责AsyncTask

package com.example.techport.professorsboard;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
import android.provider.ContactsContract;
import android.widget.ListView;
import android.widget.Toast;
import java.util.List;
/**
 * Created by Techport on 09/08/2016.
 */
public class backgroundtask extends AsyncTask<String,classes,String> {
    Context ctx;
    classesadapter classesadapter;
    Activity activity;
    ListView listView;
    backgroundtask(Context ctx){
        this.ctx = ctx;
        activity = (Activity)ctx;
    }
    @Override
    protected void onPreExecute() {
    }
    @Override
    protected String doInBackground(String... params) {
      String method = params[0];
      DatabaseHelper db = new DatabaseHelper(ctx);
        if(method.equals("add_info")){
            String classname = params[1];
            int profid = Integer.parseInt(params[2]);
            SQLiteDatabase helper = db.getWritableDatabase();
            db.addclass(classname,profid);
            return "One row inserted. . .";
        }
        else if(method.equals("get_info")){
            listView = (ListView) activity.findViewById(R.id.display_listvew);
            SQLiteDatabase helper = db.getReadableDatabase();
          Cursor cursor = db.getclasses(helper);
            classesadapter = new classesadapter(ctx,R.layout.display_classrooms);
            String class_name;
            int prof_id,class_id;
            while(cursor.moveToNext()){
                class_id = cursor.getInt(cursor.getColumnIndex("class_id"));
                prof_id = cursor.getInt(cursor.getColumnIndex("prof_id"));
                class_name = cursor.getString(cursor.getColumnIndex("class_name"));
                classes classses = new classes(class_name,class_id,prof_id);
                publishProgress(classses);
            }
return "get_info";
        }
        return null;
    }
    @Override
    protected void onProgressUpdate(classes... values) {
      classesadapter.add(values[0]);
    }
    @Override
    protected void onPostExecute(String result) {
        if(result.equals("get_info"))
        {
            listView.setAdapter(classesadapter);
        }
        else {
            Toast.makeText(ctx, result, Toast.LENGTH_LONG).show();
        }
    }
}

3。)classesadapter&lt;&lt;类的适配器类

package com.example.techport.professorsboard;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by Techport on 10/08/2016.
 */
public class classesadapter extends ArrayAdapter {
    List list = new ArrayList();
    public classesadapter(Context context, int resource) {
        super(context, resource);
    }
    public void add(classes object) {
        list.add(object);
        super.add(object);
    }
    @Override
    public int getCount() {
        return list.size();
    }
    @Override
    public Object getItem(int position) {
        return list.get(position);
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Typeface typeface = Typeface.createFromAsset(getContext().getAssets(),"SqueakyChalkSound.ttf");
        View row = convertView;
       classesholder classesholder;
        if(row==null){
            LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = layoutInflater.inflate(R.layout.display_classrooms,parent,false);
            classesholder = new classesholder();
            classesholder.c_id = (TextView) row.findViewById(R.id.cl_id);
            classesholder.c_name = (TextView) row.findViewById(R.id.cl_name);
            row.setTag(classesholder);
        }
        else{
            classesholder = (classesholder) row.getTag();
        }
        classes classes = (classes) getItem(position);
        classesholder.c_id.setText(Integer.toString(classes.getClass_id()));
        classesholder.c_name.setText(classes.getClass_name());
        classesholder.c_id.setTypeface(typeface);
        classesholder.c_id.setTextColor(Color.WHITE);
        classesholder.c_name.setTypeface(typeface);
        classesholder.c_name.setTextColor(Color.WHITE);
        return row;
    }
static class classesholder
{
    TextView c_id, c_name;
}
}

原谅我,如果我过多地给出了代码,那就是我现在这么偏执,以至于我不知道如何处理这个问题。我希望这些就足够了。我需要帮助......

1 个答案:

答案 0 :(得分:0)

我发现了问题。

我只需删除布局中视图的所有onClick值。