从另一项活动中删除一行 [英] remove row from another activity

查看:170
本文介绍了从另一项活动中删除一行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个是通过自定义阵列适配器膨胀的ListView和它的onclick需要与有关该行。之后点击删除数据的另一个活动它应该从列表中删除的项目,并返回到列表中。

我使用的是code下面这样:

  INT deleteposition = CustomizedListView.deleteposition;
CustomizedListView.list.removeViewAt(deleteposition);
CustomizedListView.adapter.notifyDataSetChanged();完();

但是有一个错误在这行:

  CustomizedListView.list.removeViewAt(deleteposition);

请告诉我如何解决它?

logcat的详细信息:

  java.lang.UnsupportedOperationException:removeViewAt(INT)是不支持的适配器视图
在android.widget.AdapterView.removeViewAt(AdapterView.java:511)
    在com.example.androidhive.openedmsg $ 1.onClick(openedmsg.java:35)
    在android.view.View.performClick(View.java:3549)
    在android.view.View $ PerformClick.run(View.java:14393)
    在android.os.Handler.handleCallback(Handler.java:605)
    在android.os.Handler.dispatchMessage(Handler.java:92)
    在android.os.Looper.loop(Looper.java:154)
    在android.app.ActivityThread.main(ActivityThread.java:4945)
    在java.lang.reflect.Method.invokeNative(本机方法)
    在java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
    在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    在dalvik.system.NativeStart.main(本机方法)

整个code:

CustomizedListView.class

 公共类CustomizedListView延伸活动{
    //所有静态变量
    静态最终字符串URL =htt​​ps://itunes.apple.com/us/rss/topalbums/limit=20/json;
    // XML节点键
    静态最后弦乐KEY_SONG =歌; //父节点
    静态最后弦乐KEY_ID =ID;
    静态最后弦乐KEY_TITLE =称号;
    静态最后弦乐KEY_ARTIST =艺术家;
    静态最后弦乐KEY_DURATION =时间;
    静态最后弦乐KEY_THUMB_URL =thumb_url;    静态的ListView列表;
    静态LazyAdapter适配器;    HashMap的<字符串,字符串>地图;    公共静态字符串newactivityno;    公共静态INT deleteposition;
    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);
        ArrayList的<&HashMap的LT;字符串,字符串>> songsList =新的ArrayList<&HashMap的LT;字符串,字符串>>();        JSONObject的JSON = JSONfunctions.getJSONfromURL(URL);
        尝试{
            JSONObject的ARR2 = json.getJSONObject(饲料);
            JSONArray ARR = arr2.getJSONArray(项);            的for(int i = 0; I< arr.length();我++){
                的JSONObject E1 = arr.getJSONObject(ⅰ);                JSONArray ARR3 = e1.getJSONArray(IM:图像);                JSONObject的arr8 = e1.getJSONObject(IM:名称);                JSONObject的arr10 = e1.getJSONObject(IM:艺术家);                    的JSONObject E12 = arr3.getJSONObject(0);            //创建新的HashMap
             地图=新的HashMap<字符串,字符串>();            map.put(KEY_THUMB_URL,e12.getString(标签));            map.put(KEY_ARTIST,arr8.getString(标签));
            map.put(KEY_TITLE,arr10.getString(标签));
            //添加HashList到ArrayList的
            songsList.add(地图);
            }        }赶上(JSONException E){
            // Log.e(log_tag,错误分析数据+ e.toString());
            Toast.makeText(getBaseContext(),
                    网络通信错误!,5).​​show();
        }
        名单=(ListView控件)findViewById(R.id.list);        //通过传递XML数据的ArrayList获取适配器
        适配器=新LazyAdapter(这一点,songsList);
        list.setAdapter(适配器);        // Click事件的单排列表
        list.setOnItemClickListener(新OnItemClickListener(){            @覆盖
            公共无效onItemClick(适配器视图<>母公司,观景,
                     INT位置,长的id){                                @燮pressWarnings(未登记)
                                HashMap的<字符串,字符串> O =(HashMap的<字符串,字符串>)list.getItemAtPosition(位置);                           // Toast.makeText(CustomizedListView.this,ID+ o.get(称号)+'被点击了。Toast.LENGTH_SHORT).show();                                deleteposition =位置;
                             newactivityno = o.get(标题);
                             意图II =新意图(getBaseContext(),newactivity.class);
                                startActivity(二);            }
        });
    }
}

newactivity.class

 公共类newactivity延伸活动{
     @覆盖
        公共无效的onCreate(捆绑savedInstanceState){
            super.onCreate(savedInstanceState);
            的setContentView(R.layout.newlayout);
            TextView的TV1 =(的TextView)findViewById(R.id.textView11);
            TextView中TV2 =(的TextView)findViewById(R.id.textView12);            按钮BN =(按钮)findViewById(R.id.button1);            tv2.setText(CustomizedListView.newactivityno);
            bn.setOnClickListener(新OnClickListener(){                @覆盖
                公共无效的onClick(视图v){
                    // TODO自动生成方法存根
                    INT deleteposition = CustomizedListView.deleteposition;
                    CustomizedListView.list.removeViewAt(deleteposition);
                    CustomizedListView.adapter.notifyDataSetChanged();                    完();                }
            });
}}


解决方案

您是在错误的方式处理这个问题。而不是删除该适配器视图查看,只需从数据集删除数据,并调用 notifyDataSetChanged()。 (这将自动删除不需要的视图。)

I have a listview which is inflated by custom array adapter and onclick takes it to another activity with the data related to that row .After clicking on delete its supposed to delete the item from the list and get back to the list.

I am using the code below for this :

int deleteposition=CustomizedListView.deleteposition;
CustomizedListView.list.removeViewAt(deleteposition);
CustomizedListView.adapter.notifyDataSetChanged();

finish();

But there is an error at this line :

 CustomizedListView.list.removeViewAt(deleteposition);

Please Tell me how to fix it ?

Logcat Details:

java.lang.UnsupportedOperationException: removeViewAt(int) is not supported in AdapterView
at android.widget.AdapterView.removeViewAt(AdapterView.java:511)
    at com.example.androidhive.openedmsg$1.onClick(openedmsg.java:35)
    at android.view.View.performClick(View.java:3549)
    at android.view.View$PerformClick.run(View.java:14393)
    at android.os.Handler.handleCallback(Handler.java:605)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:4945)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)

The entire Code :

CustomizedListView.class

public class CustomizedListView extends Activity {
    // All static variables
    static final String URL = "https://itunes.apple.com/us/rss/topalbums/limit=20/json";
    // XML node keys
    static final String KEY_SONG = "song"; // parent node
    static final String KEY_ID = "id";
    static final String KEY_TITLE = "title";
    static final String KEY_ARTIST = "artist";
    static final String KEY_DURATION = "duration";
    static final String KEY_THUMB_URL = "thumb_url";

    static ListView list;
    static LazyAdapter adapter;

    HashMap<String, String> map;

    public static  String newactivityno;

    public static int deleteposition;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

        JSONObject json = JSONfunctions.getJSONfromURL(URL);


        try {
            JSONObject arr2 = json.getJSONObject("feed");
            JSONArray arr = arr2.getJSONArray("entry");

            for (int i = 0; i < arr.length(); i++) {
                JSONObject e1 = arr.getJSONObject(i);

                JSONArray arr3 = e1.getJSONArray("im:image");

                JSONObject arr8 = e1.getJSONObject("im:name");

                JSONObject arr10 = e1.getJSONObject("im:artist");

                    JSONObject e12 = arr3.getJSONObject(0);

            // creating new HashMap
             map = new HashMap<String, String>();

            map.put(KEY_THUMB_URL,  e12.getString("label"));

            map.put(KEY_ARTIST, arr8.getString("label"));
            map.put(KEY_TITLE, arr10.getString("label"));
            // adding HashList to ArrayList
            songsList.add(map);
            }

        } catch (JSONException e) {
            // Log.e("log_tag", "Error parsing data "+e.toString());
            Toast.makeText(getBaseContext(),
                    "Network communication error!", 5).show();
        }


        list=(ListView)findViewById(R.id.list);

        // Getting adapter by passing xml data ArrayList
        adapter=new LazyAdapter(this, songsList);        
        list.setAdapter(adapter);

        // Click event for single list row
        list.setOnItemClickListener(new OnItemClickListener() {

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

                                @SuppressWarnings("unchecked")
                                HashMap<String, String> o= (HashMap<String, String>) list.getItemAtPosition(position);

                           //   Toast.makeText(CustomizedListView.this, "ID '" + o.get("title") + "' was clicked.", Toast.LENGTH_SHORT).show(); 

                                deleteposition=position;
                             newactivityno= o.get("title");
                             Intent ii= new Intent(getBaseContext(),newactivity.class); 
                                startActivity(ii);

            }
        });     
    }   
}

newactivity.class

public class newactivity extends Activity{


     @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.newlayout);


            TextView tv1=(TextView)findViewById(R.id.textView11);
            TextView tv2=(TextView)findViewById(R.id.textView12);

            Button bn=(Button)findViewById(R.id.button1);

            tv2.setText(CustomizedListView.newactivityno);


            bn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    int deleteposition=CustomizedListView.deleteposition;
                    CustomizedListView.list.removeViewAt(deleteposition);
                    CustomizedListView.adapter.notifyDataSetChanged();

                    finish();

                }
            });
}

}

解决方案

You are approaching this problem in the wrong manner. Rather than remove the View from the AdapterView, simply remove the data from the data set and call notifyDataSetChanged(). (This will remove the unwanted View automatically.)

这篇关于从另一项活动中删除一行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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