ListView onClickListner funktioniert nicht und Zeile aus ListView löschen

list_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginTop="5dp">

<TextView
    android:id="@+id/mytitle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="5dip"
    android:layout_marginTop="5dp"
    android:layout_toRightOf="@+id/icon"
    android:background="@drawable/textbox1"
    android:paddingBottom="10dp"
    android:text="Title"
    android:textColor="#CC0033"
    android:textSize="20dp" />

<ImageView
    android:id="@+id/icon"
    android:layout_width="wrap_content"
    android:layout_height="75dp"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/mytitle"
    android:layout_marginLeft="20dp"
    android:scaleType="fitXY"
    android:paddingLeft="10dp"
    android:paddingRight="10dp" />

<TextView
    android:id="@+id/descri"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/mytitle"
    android:layout_alignParentRight="true"
    android:layout_alignTop="@+id/icon"
    android:layout_marginTop="16dp"
    android:background="@drawable/textbox1"
    android:text="Description"
    android:textColor="#3399FF"
    android:textSize="14dp" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/mytitle"
    android:layout_toLeftOf="@+id/mytitle"
    android:layout_marginLeft="5dp"
    android:background="@drawable/buttontextview"
    android:text="       Click To Share"
    android:textColor="@android:color/white"
    android:textSize="13sp" />

Das ist meinRowItem Klasse

public class RowItem {

       private String imagepath;
       private String title;
       private String desc;
       public boolean isclicked;

public RowItem(String imagepath,String title,String desc) {
    System.out.println("ImagePath is:---"+imagepath);
    this.imagepath = imagepath;
    System.out.println("Title is:---"+title);
    this.title = title;
    System.out.println("Description is:---"+desc);
    this.desc = desc;
    isclicked = false;
}

 public String getImagepath() {
    return imagepath;
}

public boolean isIsclicked() {
return isclicked;
  }

public void setIsclicked(boolean isclicked) {
this.isclicked = isclicked;
}

public void setImagepath(String imagepath) {
    this.imagepath = imagepath;
}


  public String getTitle() {
       return title;
  }
   public String getDesc() {
    return desc;
}

public void setDesc(String desc) {
    this.desc = desc;
}

public void setTitle(String title) {
    this.title = title;
        }
    @Override
   public String toString() {
         return title + "\n" + desc;
    }
 }

Das ist meinonCreate() Methode aus der Übung

      {  int k = 0;
    if(i>0){
    rowItems = new ArrayList<RowItem>();
     for (int j = 0;j<i ; j++) {
         System.out.println("Loop Value:--"+j);
         System.out.println("Location Details:-----"+location.get(j));
         System.out.println("Description Details:------"+description.get(j));
         System.out.println("Image Details:------"+images.get(j));

            RowItem item = new RowItem(images.get(j),location.get(j),description.get(j));
            rowItems.add(item);
        }
        listView = (ListView) findViewById(R.id.list);
        adapter = new CustomListViewAdapter(PicActivity.this, rowItems);

        listView.setAdapter(adapter);           
          listView.setOnItemClickListener(this);
   }

Dies ist meine ListeonClicklistner Methode

    @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    System.out.println("My List Item Clicked");
    mylistid = position;
    Button deleteBtn = (Button) findViewById(R.id.delete);
    deleteBtn.setOnClickListener(this);
    File myimagefile = new File(images.get(position));

    lastlistid = mydb.getlastlistid();
    int list = Integer.valueOf(lastlistid.get(0));
    listno=0 ;
    listno = list-position;
      SharedPreferences mylistpref = getSharedPreferences(Constants.listiddetails, 0);
    Editor edit= mylistpref.edit();
    edit.putInt("listid", listno);
    edit.commit();

    System.out.println("First Position Value:-"+position);
         Toast toast = Toast.makeText(getApplicationContext(),
            "Title " + (position + 1) + ": " + rowItems.get(position),
            Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);
        toast.show();

        Intent intermediate = new Intent (PicActivity.this,InterMediateActivity.class);
        intermediate.putExtra("savenshare", "notshare");
        intermediate.putExtra("flag", "false");
        startActivity(intermediate);
        finish();
    }

DasCheckbox kommt in der liste aberonItemclicklistner funktioniert nicht.

Mein deleteButtononClicklistner ich mag das

     case R.id.delete:
 System.out.println("My List item:-"+mylistid);
         ((CustomListViewAdapter)listView.getAdapter()).notifyDataSetChanged();
 break;

Hier ist mylistid eine globale Ganzzahl, die ich auf listitemonclick einstelle.

Warum funktioniert mein Listenelement onclicklistner nicht, wenn ich ein Kontrollkästchen in meiner Liste hinzufüge, und wie kann ich die Zeile löschen und das Listenelement aktualisieren? Ich habe viele Tutorials befolgt, konnte sie aber nicht implementieren.

Bitte helfen Sie !!!!

AKTUALISIEREN

Dies ist meine customListViewAdapter-Klasse

 public class CustomListViewAdapter extends BaseAdapter   {
private  List<RowItem> arr = new ArrayList<RowItem>();

ArrayList<Integer> checks=new ArrayList<Integer>();
private Context context;
Bitmap mybitmap;
private Activity activity;

ViewHolder holder = null;

int mypos=0;
File f;
RowItem rowItem;

public CustomListViewAdapter(Context context,List<RowItem> items) {
    //super();
    this.arr = items;
    this.context=context;
}

private class ViewHolder {
    //ImageView imageView;
    TextView txtTitle;
    TextView txtDesc;
    ImageView image;
  //  CheckBox mychk;

}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return arr.size();
}

@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    //mypos=arg0;
    return arr.get(arg0);

}

@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return 0;
}

public View getView(int position, View convertView, ViewGroup parent) {



rowItem = (RowItem) getItem(position);

    f = new File(rowItem.getImagepath());

System.out.println("My list item Position from GetView:--"+position);



LayoutInflater mInflater = (LayoutInflater) context
        .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

if (convertView == null) {
    convertView = mInflater.inflate(R.layout.list_item, null);
    holder = new ViewHolder();

    holder.txtDesc = (TextView) convertView.findViewById(R.id.descri);

    holder.txtTitle = (TextView) convertView.findViewById(R.id.mytitle);

 //   holder.mychk = (CheckBox) convertView.findViewById(R.id.checkBox1);

    holder.image = (ImageView) convertView.findViewById(R.id.icon);

 //   holder.mychk.setOnCheckedChangeListener(this);

//    holder.mychk.setTag(arr.get(position));

  //  holder.mychk.setChecked(false);

    convertView.setTag(holder);
} else
    holder = (ViewHolder) convertView.getTag();

// holder.mychk.setOnCheckedChangeListener (this);

System.out.println("My Description is:--"+holder.txtDesc.getText());
System.out.println("My Title is:--"+holder.txtTitle.getText());

holder.txtDesc.setText("  "+rowItem.getDesc());

holder.txtTitle.setText("  "+rowItem.getTitle());
if(f.exists())
{
    mybitmap = BitmapFactory.decodeFile(f.getAbsolutePath());
    Bitmap myeditedbitmap = Bitmap.createScaledBitmap(mybitmap, 180, 150, false);

holder.image.setImageBitmap(myeditedbitmap);

//holder.mychk.setChecked(true);
//setImageResource(rowItem.getImagepath());
}
//holder.txtTitle.setText(rowItem.getTitle());

/* for(int i=0;i<ArrayId.size();i++)
{
  rowItem.remove(ArrayId[i]);
}
*/
return convertView;
    }



}







}

UPDATE 2

Ich habe meine ListItem-XML auf einen bestimmten Code aktualisiert und jetzt funktioniert onItemClick.

android: descendantFocusability = "blocksDescendants"

Jetzt ist der andere Teil ... Zeilenelement löschen ... der immer noch nicht funktioniert. Und auch wenn ich ein Kontrollkästchen auswähle, werden auch andere ausgewählt. Wie wenn ich 1. ... wähle, dann wird 3..5..7 ausgewählt ..Wie vermeide ich das ??

Mein deleteItem-Zeilencode ..

    deleteBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                SparseBooleanArray checkedItemPositions =   listView.getCheckedItemPositions();
                 int itemCount = listView.getCount();

                 for(int i=itemCount-1; i >= 0; i--){
                     if(checkedItemPositions.get(i)){
                //         adapter.remove(rowItems.get(i));  This line is giving me error.first i want to delete row temp and give a toast message.then i will update the database later.but as i am using customarrayadapter class.so i dont have the method remove.Can someone help me regarding the remove method ?


                     }
                 }
                 checkedItemPositions.clear();
                 adapter.notifyDataSetChanged();
            }

        });

UPDATE 3

       case R.id.delete:

      SharedPreferences del = getSharedPreferences(Constants.checkedid,0);
        int checkmyid = 0;
        checkmyid = del.getInt("check", 0);

        int mycount = listView.getCount();

        System.out.println("My List item COUNT FROM DELETE METHOD:-"+mycount);  


                System.out.println("My List item FROM DELETE METHOD:-"+checkmyid);  

                rowItems.remove(checkmyid);
                 mydb.delete(checkmyid);




            ((CustomListViewAdapter)listView.getAdapter()).notifyDataSetChanged();
            break;

und meine Löschmethode aus der Datenbank ist

public void delete(int id){
    String sql = "delete from picdetails where id="+id;
    Cursor mych;
    mych = myDataBase.rawQuery(sql, null);
}

Aber wenn ich die Datenbank wieder öffne, werden die Daten wieder angezeigt. Wie vermeide ich? Auch wenn ich ein Kontrollkästchen zum Löschen auswähle, wird dieses bestimmte Kontrollkästchen nicht gelöscht. Die unterste Zeile wird gelöscht.

UPDATE 4

Ich habe den Löschen-Button-Code aktualisiert. Jetzt wird das Zeilenelement gelöscht. Aber für die erste Auswahl werden die Elemente nicht gelöscht. Es wird von unten gelöscht. Aber die Checkitemid ist perfekt

      SharedPreferences del = getSharedPreferences(Constants.checkedid,0);
       int checkmyid = 0;
       checkmyid = del.getInt("check", 0);

       int mycount = listView.getCount();

          System.out.println("My List item COUNT FROM DELETE METHOD:-"+mycount);

       SparseBooleanArray checked = listView.getCheckedItemPositions();

     System.out.println("*****My SELECTED List item FROM DELETE METHOD:-*****"+checkmyid);




        rowItems.remove(checkmyid);

Antworten auf die Frage(2)

Ihre Antwort auf die Frage