开发者

Not able to get the clicked row number in list view of android

开发者 https://www.devze.com 2023-02-01 12:53 出处:网络
I am trying to build a simple sms app for which edit page lists all the saved smses. I gave 2 buttons in my layout for Edit and Delete but when I am clicking on them I am unable to get the rowid (row

I am trying to build a simple sms app for which edit page lists all the saved smses. I gave 2 buttons in my layout for Edit and Delete but when I am clicking on them I am unable to get the rowid (row number from top) to retrieve the sms corresponding to that particular row.. Somebody please help me..my sms adapter is not not extending anything..Here's my class and xml files..

public class SMSEdit extends ListActivity{

 private SMSDbAdapter mDbHelper;
 //private Button editsmsbtn, deletesmsbtn;

 public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
    setContentView(R.layout.editsmslist);

    mDbHelper = new SMSDbAdapter(this);
    mDbHelper.open();
    fillData();

}

 public void fillData() {
     Cursor smsCursor = mDbHelper.fetchAllNotes();
     startManagingCursor(smsCursor);

     // Create an array to specify the fields we want to display in the list (only TITLE)
     String[] from = new String[]{SMSDbAdapter.KEY_TITLE,
       SMSDbAdapter.KEY_BODY, 
       SMSDbAdapter.KEY_DATE, 
       SMSDbAdapter.KEY_TIME};

     // and an array of the fields we want to bind those fields to (in this case just text1)
     int[] to = new int[]{R.id.smseditlistTO, 
       R.id.smseditlistMessage,
       R.id.smseditlistDay,
       R.id.smseditlistTime};

     // Now create a simple cursor adapter and set it to display
     SimpleCursorAdapter smsadap = 
         new SimpleCursorAdapter(this, R.layout.smsrow, smsCursor, from, to);
     setListAdapter(smsadap);

 }

  public void myEditClickHandler(View v) 
 {
  //get the row the clicked button is in
  LinearLayout vwParentRow = (LinearLayout)v.getParent();

  Button btnChild = (Button)vwParentRow.getChildAt(4);

  btnChild.setText("I've been clicked!");

  ListAdapter pos = getListAdapter();

  Intent intent = new Intent();
      intent.setClass(SMSEdit.this, SMS.class);
     // intent.putExtra(SMSDbAdapter.KEY_ROWID, id);

      startActivity(intent);
      finish();
 }
  public void myDeleteClickHandler(View v) 
 {

  //get the row the clicked button is in
  LinearLayout vwParentRow = (LinearLayout)v.getParent();

  //TextView child = (TextView)vwParentRow.getChildAt(0);
  Button btnChild = (Button)vwParentRow.getChildAt(5);
  //btnChild.setText(child.getText());
  btnChild.setText("I've been clicked!");

 int c = Color.CYAN;

   vwParentRow.setBackgroundColor(c); 
vwParentRow.refreshDrawableState();

         }
 }

editsmslist.xml -- >>

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
<ListView android:id="@+id/android:list"
          android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
   <TextView android:id="@+id/android:empty"
          android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="No Future SMS Yet" android:textSize="35px"/>
</LinearLayout>

smsrow.xml -- >>

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView 
 android:id="@+id/ScrollView01" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
xmlns:android="http://schemas.android.com/apk/res/android">

<LinearLayout 
 android:id="@+id/LinearLayout02"
       android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
       android:orientation="vertical">
      <LinearLayout android:id="@+id/LinearLayout03"                      android:layout_width="wrap_content" android:layout_height="wrap_content">
            <T开发者_运维技巧extView android:layout_height="wrap_content"                     android:layout_width="fill_parent" android:text="@string/smsdetailseditlist"       android:id="@+id/smseditlistTO" android:paddingLeft="5px">
              </TextView>

               <TextView android:layout_height="wrap_content"     android:text="@string/smsdetailseditlist" android:id="@+id/smseditlistMessage"        android:paddingLeft="20px" android:maxLines="1" android:layout_width="wrap_content">
            </TextView>
</LinearLayout>

       <LinearLayout android:id="@+id/LinearLayout01" 
         android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
       android:orientation="horizontal" android:paddingLeft="5px">

         <TextView android:layout_width="wrap_content"       android:layout_height="wrap_content" android:text="Date: "></TextView><TextView                 android:text="@string/smsdetailseditlist" android:id="@+id/smseditlistDay"          android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
            <TextView android:layout_width="wrap_content"               android:layout_height="wrap_content" android:text="Time: " android:paddingLeft="5px">               </TextView><TextView android:text="@string/smsdetailseditlist"                 android:id="@+id/smseditlistTime" android:layout_width="wrap_content"                android:layout_height="wrap_content" android:paddingRight="10px"></TextView>
            <Button  android:layout_width="wrap_content"          android:layout_height="wrap_content" android:id="@+id/EditSMSButton"          android:text="@string/editsms" android:onClick="@string/myEditClickHandler"></Button>
            <Button android:layout_width="wrap_content"        android:layout_height="wrap_content" android:id="@+id/DeleteSMSButton"            android:text="@string/deletesms" android:onClick="@string/myDeleteClickHandler"></Button>
         </LinearLayout>
       </LinearLayout>
      </ScrollView>

Also Please suggest if there'a yn better way to implement this or make the layout look better...


You can extend a cursorAdapter like this...

public class exampleAdapter extends CursorAdapter
 {
     LayoutInflater inflater; 
    public exampleAdapter (Context context, Cursor c) {
        super(context, c);
        inflater = LayoutInflater.from(context);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        // TODO Auto-generated method stub
        Button btn_del = (Button)view.findViewById(R.id.button1);
btn_del.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                SMSDbAdapter vb = new SMSDbAdapter(context);
                vb.open();
                String xyz = cursor.getString(0); //Persumably your ID

                vb.Delete(Integer.parseInt(cursor.getString(0)));
                Toast.makeText(context, xyz + " Deleted!", Toast.LENGTH_SHORT).show();
                vb.close(); 

            }
        });


    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {

        return inflater.inflate(R.layout.smsrow, parent, false);

    }        
 }


I had a similar problem with my ListView.

Assume you are filling a ListView dynamically. You have 5 rows (for example). The id of first row is 1 second is 2 and so on.

When you scroll whatever rows are visible to you, the id of the 1st row (that you currently see on screen) will always be 1. You need to control that by using mabye some another class (XYZ).

I simply used ArrayList<XYZ> and that worked.

You can override this method in your SMSAdapter:

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

and then call the get(position) method that returns an ArrayList<XYZ>.


You should use ListView to display your messages.

Store the data retrieved from database in a Array of Strings say s1. Then

private ArrayList<String> arr_sort = new ArrayList<String>(); And copy whole s1 into arr_sort by using add() method.

While setting adapter

lv.setAdapter(new ArrayAdapter<String>(DataAttach.this, android.R.layout.simple_list_item_1, arr_sort)); where lv is the ListView refernce.

Then use this method for onClick

lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    String item = (String) lv.getItemAtPosition(position);

                    Toast.makeText(*.this,
                            "You selected - " + item + " ,Please wait...",
                            Toast.LENGTH_LONG).show();

                    Intent intent = new Intent(*.this, *.class);
                    *.this.startActivity(intent);
                }
            });

Hope this helps..

0

精彩评论

暂无评论...
验证码 换一张
取 消