Android:ListView单击事件使用SimpleAdapter无法正常工作

时间:2014-09-03 18:48:23

标签: android listview simpleadapter

在我的应用程序中,我试图在单击列表项时将TextView设置为删除线。但Listview clik项目无效。

以下是代码:

    listView = ( ListView ) findViewById(R.id.listview);
    SimpleAdapter adapter = new SimpleAdapter( this, aList, R.layout.add_list_detail, 
                   new String[] { "txt", "cur" }, new int[] { R.id.txt, R.id.cur } );
    // Setting the adapter to the listView
    listView.setAdapter(adapter);


    Button btnAdd = (Button) findViewById(R.id.btnAdd);
    btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent details = new  Intent(AddNewList.this, AddNewGrocery.class); // Call
            startActivityForResult(details, 1);
        }
       });
    listView.setClickable(true);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

          @Override
          public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

           // Object o = lv.getItemAtPosition(position);
            /* write you handling code like...
            String st = "sdcard/";
            File f = new File(st+o.toString());
            // do whatever u want to do with 'f' File object
            */  

              TextView item = (TextView) arg1.findViewById(R.id.txt);
              item.setPaintFlags(item.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
          }
        });


         protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == 1) {
            if(resultCode == RESULT_OK){
                Bundle b = data.getExtras();
                if ( b!= null ){
                String strName=data.getStringExtra("name");
                String strQty=data.getStringExtra("quantity");
                System.out.println(strName);
                System.out.println(strQty);





                SimpleAdapter adapter = new SimpleAdapter( this, aList, R.layout.add_list_detail, 
                        new String[] { "txt", "cur" }, new int[] { R.id.txt, R.id.cur } );

                    HashMap<String, String> hm = new HashMap<String,String>();

                    hm.put("txt", strName);
                    hm.put("cur",strQty);
                    aList.add(hm);

                // Keys used in Hashmap
                String[] from = {"txt","cur" };

                // Ids of views in listview_layout
                int[] to = {R.id.txt,R.id.cur};


                listView.setAdapter(adapter);
                adapter.notifyDataSetChanged();

                }
            }
            if (resultCode == RESULT_CANCELED) {
                //Write your code if there's no result
            }
        }
    }

2 个答案:

答案 0 :(得分:2)

如果您在列表视图中使用任何布局,请在xml

中使用它

android:descendantFocusability="blocksDescendants"
或以编程方式mListView.setDescendantFocusability(ListView.FOCUS_BLOCK_DESCENDANTS);

在列表中的第一个父布局中。这就像魔术一样,点击不会被列表中的任何元素占用,而是直接转到列表项。

答案 1 :(得分:1)

我没有在您的代码中发现问题,但我发布了有效的完整代码:

MainActivity.java:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.support.v7.app.ActionBarActivity;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
    ListView listView;
    Activity activity;

    ArrayList<Map<String, String>> aList;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        activity = this;
        aList = new ArrayList<Map<String, String>>();
        String[] from = { "name", "quantity" };
        int[] to = { R.id.txt, R.id.cur };
        listView = (ListView) findViewById(R.id.add_list_detail);
        SimpleAdapter adapter = new SimpleAdapter(this, aList,
                R.layout.add_list_detail, from, to);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int position, long arg3) {

                TextView item = (TextView) arg1.findViewById(R.id.txt);
                item.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);
            }
        });

        Button btnAdd = (Button) findViewById(R.id.btnAdd);
        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent details = new Intent(activity, Test.class); // Call
                startActivityForResult(details, 1);
            }
        });
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == 1) {
            if (resultCode == RESULT_OK) {
                Bundle b = data.getExtras();
                if (b != null) {
                    String strName = data.getStringExtra("name");
                    String strQty = data.getStringExtra("quantity");
                    System.out.println(strName);
                    System.out.println(strQty);

                    SimpleAdapter adapter = new SimpleAdapter(this, aList,
                            R.layout.add_list_detail, new String[] { "txt",
                                    "cur" }, new int[] { R.id.txt, R.id.cur });

                    HashMap<String, String> hm = new HashMap<String, String>();

                    hm.put("txt", strName);
                    hm.put("cur", strQty);
                    aList.add(hm);

                    // Keys used in Hashmap
                    String[] from = { "txt", "cur" };

                    // Ids of views in listview_layout
                    int[] to = { R.id.txt, R.id.cur };

                    listView.setAdapter(adapter);
                    adapter.notifyDataSetChanged();

                }
            }
            if (resultCode == RESULT_CANCELED) {
                // Write your code if there's no result
            }
        }
    }

}

Test.java:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Test extends Activity{


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.testlayout);
        Button button = (Button) findViewById(R.id.back_button);
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent returnIntent = new Intent(); returnIntent.putExtra("name","myname1"); returnIntent.putExtra("quantity","quantity234"); setResult(RESULT_OK,returnIntent); finish();

            }
        });


    }
}

add_list_detail.xml:

<LinearLayout 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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.mytest.MainActivity"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/txt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <TextView
        android:id="@+id/cur"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>

activity_main.xml中:

<RelativeLayout 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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.mytest.MainActivity" >



    <ListView
        android:id="@+id/add_list_detail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="153dp" >
    </ListView>

    <Button
        android:id="@+id/btnAdd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:layout_marginLeft="53dp"
        android:layout_marginTop="40dp"
        android:layout_toRightOf="@+id/textView1"
        android:text="Button" />

</RelativeLayout>

testlayout.xml:

<?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="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/back_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>