簡體   English   中英

片段事務分離並附加后,ListView無法正常工作嗎?

[英]ListView Not Working after Fragment Transaction detach and attach?

我將在運行時替換一個片段,以顯示另一個包含列表視圖的片段,該列表視圖顯示在運行時從遠程服務器獲取的數據。 從列表中選擇一個項目時! 通過稱為DarsCommunicator的接口從該片段中調用主要活動中的delete_surah()函數。 該函數從數據庫中刪除一行,然后通過分離它來刷新該片段,然后通過活動將其重新附加,但是在重新附加該片段時,應用程序崩潰並且日志目錄顯示錯誤。 代碼如下。

主要活動 :

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.content_dars);
    ContentDarsSurahFragmentTwo fragmentSurahtwo=new 
    ContentDarsSurahFragmentTwo();
    transaction.replace(R.id.frame,fragmentSurahtwo,"fragmentsurahtwo");
    transaction.commit();
    }

片段:

 package com.example.mashood.muftiattaullahmultanicom;

 import android.app.Fragment;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.ListAdapter;
 import android.widget.ListView;
 import android.widget.TextView;
 import android.widget.Toast;

 import com.android.volley.Request;
 import com.android.volley.Response;
 import com.android.volley.VolleyError;
 import com.android.volley.toolbox.StringRequest;

 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;

 import java.util.HashMap;
 import java.util.Map;

/**
 * Created by Mashood on 8/16/2017.
 */

public class ContentDarsSurahFragmentTwo extends Fragment {
View view;
TextView text;
ListView list;
String surah_no;
String surah_name;
public static String url = 
           "http://www.muftiattaullahmultani.com/android/get_all_surah.php";
String[] dars_topic;
String[] dars_id;
String[] dars_link;
String[] dars_date;
String[] data;
int count = 0;
int i = 0;
DarsCommunicator communicator;

  @Nullable
  @Override
  public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup 
   container, Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.audio_fragment_three, container, 
   false);

      return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    text=(TextView)view.findViewById(R.id.textView);
    text.setText("Dars e Quran List");
    communicator=(DarsCommunicator)getActivity();
    StringRequest stringRequest=new StringRequest(Request.Method.POST, url, 
     new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {

            JSONObject object2=null;
            JSONArray object = null;
            try {
                object = new JSONArray(response);
                text.setText("here");
                dars_topic = new String[object.length()];
                dars_id = new String[object.length()];
                dars_link = new String[object.length()];
                dars_date = new String[object.length()];

                while (count < object.length()) {
                    object2 = object.getJSONObject(count);
                    dars_id[count] = object2.getString("surah_no");
                    dars_topic[count] = object2.getString("surah_name");
                    text.setText("here2");
                    count++;
                }

                list = (ListView) view.findViewById(R.id.list);
                ListAdapter adapter = new ArrayAdapter<String>
           (getActivity(), android.R.layout.simple_list_item_1, dars_topic);
                list.setAdapter(adapter);
                list.setOnItemClickListener(new 
                AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View 
       view, int position, long id) {

                        surah_no=dars_id[position];
                        surah_name=dars_topic[position];
                         communicator.delete_surah(surah_no,surah_name);
                    }
                });
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }}, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getActivity(),"Error",Toast.LENGTH_LONG).show();
        }
    });
    MySingleton.getInstance(getActivity()).addToRequestQueue(stringRequest);
    }

  }

delete_surah()函數:

    public void delete_surah(final String surah_no, final String 
        surah_name)
    {

    url="http://www.muftiattaullahmultani.com/android/delete_surah.php";
    AlertDialog.Builder builder=new AlertDialog.Builder(this);
    builder.setTitle("Delete "+surah_name+" ?");
    builder.setMessage("Are you sure you want to delete "+surah_name+" ?");
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

            StringRequest stringRequest=new 
     StringRequest(Request.Method.POST, url, new Response.Listener<String>() 
    {

                @Override
                public void onResponse(String response) {
                    Toast.makeText(getApplicationContext(),surah_name+" 
    Deleted Succesfully",Toast.LENGTH_LONG).show();
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {


  Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_LONG).show();
                }
            }){
                protected Map<String,String> getParams()
                {
                    Map<String,String>param=new HashMap<String, String>();
                    param.put("surah_no",surah_no);
                    return param;
                }

            };       

   MySingleton.getInstance(getApplicationContext()).
 addToRequestQueue(stringRequest);
            ContentDarsSurahFragmentTwo fragmentsurahtwo=

(ContentDarsSurahFragmentTwo)getFragmentManager().
findFragmentByTag("fragmentsurahtwo");
            FragmentTransaction 
 transaction=getFragmentManager().beginTransaction();
       transaction.detach(fragmentsurahtwo);
            transaction.attach(fragmentsurahtwo);
            transaction.commit();
        }
    });
    builder.setNegativeButton("Cancel",null);
    builder.show();
   }

ContentDarsSurahFragmentTwo第一次可以正常工作,並顯示正確的數據,但是從delete_surah()函數執行事務后,應用程序崩潰,logcat顯示以下錯誤:

錯誤日志:

流程:com.example.mashood.muftiattaullahmultanicom,PID:13762 java.lang.NullPointerException:嘗試在android.widget上的空對象引用上調用虛擬方法'java.lang.String java.lang.Object.toString()'。 ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)位於android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)位於android.widget.AbsListView.obtainView(AbsListView.java:2402)位於android.widget.ListView.makeAndAddView(ListView .java:1891),位於android.widget.ListView.fillDown(ListView.java:713),位於android.widget.ListView.fillFromTop(ListView.java:779),位於android.widget.ListView.layoutChildren(ListView.java:1699)在android.widget.AbsListView.onLayout(AbsListView.java:2206)在android.view.View.layout(View.java:16075)在android.view.ViewGroup.layout(ViewGroup.java:5300)在android.widget。位於android.view.View.layout(View.java:16075)的RelativeLayout.onLayout(RelativeLayout.java:1077)位於android.widget.FrameLayo的android.view.ViewGroup.layout(ViewGroup.java:5300) ut.layoutChildren(FrameLayout.java:579)在android.widget.FrameLayout.onLayout(FrameLayout.java:514)在android.view.View.layout(View.java:16075)在android.view.ViewGroup.layout(ViewGroup .java:5300),位於android.widget.RelativeLayout.onLayout(RelativeLayout.java:1077),位於android.view.View.layout(View.java:16075),位於android.view.ViewGroup.layout(ViewGroup.java:5300)在android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)在android.widget.FrameLayout.onLayout(FrameLayout.java:514)在android.view.View.layout(View.java:16075)在android.view。 android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)的ViewGroup.layout(ViewGroup.java:5300)android.widget.LinearLayout.onLayout(LinearLayout)的android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) .java:1466)位於android.view.View.layout(View.java:16075)位於android.view.ViewGroup.layout(ViewGroup.java:5300)位於android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)在android.widget.FrameLayout.onLayou t(FrameLayout.java:514)在android.view.View.layout(View.java:16075)在android.view.ViewGroup.layout(ViewGroup.java:5300)在android.widget.LinearLayout.setChildFrame(LinearLayout.java :1703),位於android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557),位於android.widget.LinearLayout.onLayout(LinearLayout.java:1466),位於android.view.View.layout(View.java:16075) android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)位於android.widget.FrameLayout.onLayout(FrameLayout.java:514)位於android.widget.FrameLayout.layout(ViewGroup.java:5300)。 android.view.ViewGroup.layout(ViewGroup.java:5300)的android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2119)的layout(View.java:16075)android.view.ViewRootImpl.performTraversals(ViewRootImpl.java :1873),位於android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1073),位於android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:5988),位於android.view.Choreographer $ CallbackRecord.run(Choreographer.java: 76 7)在android.view.Choreographer.doCallbacks(Choreographer.java:580)在android.view.Choreographer.doFrame(Choreographer.java:550)在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:753)在android.os.Looper.loop(Looper.java:135)處android.os.Handler.dispatchMessage(Handler.java:95)處android.os.Handler.handleCallback(Handler.java:739)android.app.ActivityThread處.main(ActivityThread.java:5910)(位於java.lang.reflect.Method.invoke(本機方法)(位於java.lang.reflect.Method.invoke(Method.java:372))(位於com.android.internal.os.ZygoteInit) $ MethodAndArgsCaller.run(ZygoteInit.java:1405)位於com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)`

因為數組為null所以您得到了NullPointerException 我建議您在聲明數組的時候初始化數組,以確保它們不為空:

String[] dars_topic = new String[0];
String[] dars_id = new String[0];
String[] dars_link = new String[0];
String[] dars_date = new String[0];
String[] data = new String[0];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM