2017-08-13 50 views
0

NOTE:我無法清除我的片段中的列表視圖再填充它之前?

首先在寫任何東西之前。這不是重複的,因爲如果那是我爲什麼會在這裏發佈這個。我沒有發現任何類似問題的答案對我有用,直到連續兩天。

問題:

我有需要兩個數據字段,然後進入下一個活動的地方有一個view pager和活動開啓2片段postsprofile活動。這裏的問題是,當我回到第一個輸入不同數據並轉到片段的活動時,listview顯示重複的數據。

我嘗試了所有可能的解決方案,但都沒有成功。

我試圖清除適配器。 我試圖通過空適配器。 我在片段的生命週期中嘗試了更多的東西,但沒有任何東西。

所以請我需要幫助。提前致謝。

package psychrating.psychrating; 

import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.SearchView; 
import android.widget.Spinner; 
import android.widget.Toast; 

import java.util.ArrayList; 

/** 
* Created by Ahmeed on 8/7/2017. 
*/ 

public class PostsFragment extends Fragment { 

    static ListView posts_list; 
    Spinner list_order; 
    SearchView search; 
    String category, date, activity; 
    boolean get_data; 
    public static ArrayList<String> data = null; 
    static Context c; 
    transient ViewHolder holder; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     data = null; 
     activity = getArguments().getString("activity"); 
     category = getArguments().getString("category"); 
     date = getArguments().getString("date"); 
     if (activity == "main") { 
      // get_data = true; 
     }else { 
      // get_data = true; 
     } 
     View view = inflater.inflate(R.layout.post_tab, container, false); 
     init(view); 
     posts_list.clearChoices(); 
     if (searchResultses != null) { 
      searchResultses.clear(); 
      searchResultses = null; 
     } 
     return view; 

    } 

    private void init(View view) { 
     posts_list = (ListView) view.findViewById(R.id.posts_list); 
     list_order = (Spinner) view.findViewById(R.id.list_order); 
     search = (SearchView) view.findViewById(R.id.search); 
     posts_list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       holder = (ViewHolder) view.getTag(); 
       Temp temp = new Temp(); 
       temp.name = holder.name.getText().toString(); 
       temp.highest = holder.highest.getText().toString(); 
       temp.dname = holder.dname.getText().toString(); 
       temp.date = holder.date.getText().toString(); 
       temp.category = holder.category; 
       temp.sdesc = holder.sdesc; 
       temp.ddesc = holder.ddesc; 
       Intent i = new Intent(c, ProfileActivity.class); 
       i.putExtra("holder", temp); 
       startActivity(i); 
      } 
     }); 


    } 

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     c = context; 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     searchResultses = new ArrayList<>(); 
     new Server(this.getActivity(), "posts").execute(category, date); 
    } 

    public static final String TAG ="ahmed"; 

    static void removeCommas() { 
     StringBuilder word = new StringBuilder(); 
     for (int i = 0; i < data.size(); i++) { 
      for (int j = 0; j < data.get(i).length(); j++) { 
       char c = data.get(i).charAt(j); 
       if (c != ',') { 
        word.append(c); 
       }else { 
        words.add(word.toString()); 
        word.delete(0, word.length()); 
       } 
      } 
     } 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     searchResultses = null; 
     adapter = null; 
    } 

    @Override 
    public void onDestroyView() { 
     super.onDestroyView(); 

    } 

    static void addToClass() { 
     SearchResults s; 
     int offset = 0; 
     for (int j = 0; j < words.size(); j += 8) { 
      Log.d(TAG, String.valueOf(words.size())); 
      s = new SearchResults(); 
      for (int i = 0; i < 8; i++) { 
       offset = 1; 
       s.add(words.get(i * offset)); 
      } 
      offset += 1; 
      s.init(); 
      searchResultses.add(s); 
     } 
    } 

    static ArrayList<SearchResults> searchResultses = null; 
    static ArrayList<String> words = new ArrayList<>(); 
    static MyCustomBaseAdapter adapter = null; 

    public static void fillList() { 
     removeCommas(); 
     addToClass(); 
     ArrayList<SearchResults> empty = new ArrayList<>(); 
     adapter = new MyCustomBaseAdapter(c, empty); 
     adapter = new MyCustomBaseAdapter(c, searchResultses); 
     posts_list.setAdapter(adapter); 
    } 
} 

注:

fillList是一家正在由的AsyncTask調用時它完成檢索數據FUNC。它使用可變data從數據刪除逗號和單詞添加到searchResult

package psychrating.psychrating; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

import java.io.Serializable; 
import java.util.ArrayList; 

/** 
* Created by Ahmeed on 8/10/2017. 
*/ 

public class MyCustomBaseAdapter extends BaseAdapter { 

    private static ArrayList<SearchResults> searchArrayList = null; 

    private LayoutInflater mInflater; 

    public MyCustomBaseAdapter(Context context, ArrayList<SearchResults> results) { 
     super(); 
     searchArrayList = results; 
     mInflater = LayoutInflater.from(context); 
    } 

    public int getCount() { 
     return searchArrayList.size(); 
    } 

    public Object getItem(int position) { 
     return searchArrayList.get(position); 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.row, parent, false); 
      holder = new ViewHolder(convertView); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.name.setText(searchArrayList.get(position).getName()); 
     holder.highest.setText(searchArrayList.get(position).getHighest()); 
     holder.dname.setText(searchArrayList.get(position).getDName()); 
     holder.date.setText(searchArrayList.get(position).getDate()); 
     holder.category = searchArrayList.get(position).getCategory(); 
     holder.sdesc = searchArrayList.get(position).getSdesc(); 
     holder.ddesc = searchArrayList.get(position).getDdesc(); 

     convertView.setTag(holder); 

     return convertView; 
    } 
} 

服務器類

package psychrating.psychrating; 

import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Build; 
import android.support.v7.app.AlertDialog; 
import android.util.Log; 
import android.widget.Toast; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.util.ArrayList; 

/** 
* Created by Ahmeed on 8/6/2017. 
*/ 

public class Server extends AsyncTask<String, String, String> { 

    private Context context; 
    private ProgressDialog progressDialog; 
    private AlertDialog.Builder builder; 
    private String type; 

    private static ArrayList<String> data = null; 

    Server(Context context, String type) { 
     this.context = context; 
     this.type = type; 
    } 

    private void createPreDialog(String message) { 
     progressDialog = new ProgressDialog(context); 
     progressDialog.setMessage(message); 
     progressDialog.setCancelable(false); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      progressDialog.create(); 
     } 
     progressDialog.show(); 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     createPreDialog("hold on"); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     switch (type) { 
      case "login": 
       String personName = params[0]; 
       String personEmail = params[1]; 
       String id = params[2]; 
       // 
       OutputStreamWriter outputStreamWriter = null; 
       BufferedWriter writer = null; 
       BufferedReader bufferedReader = null; 
       HttpURLConnection connection = null; 

       String line; 
       String result = null; 
       try { 
        URL url = new URL("http://192.168.1.64/blabla/sign_in.php"); 
        connection = (HttpURLConnection) url.openConnection(); 
        connection.setRequestMethod("POST"); 
        connection.setDoOutput(true); 
        connection.setDoInput(true); 
        connection.setConnectTimeout(8000); 
        outputStreamWriter = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); 
        writer = new BufferedWriter(outputStreamWriter); 
        String parameters = "name=" + personName + "&email=" + personEmail + "&id=" + id; 
        writer.write(parameters); 
        writer.flush(); 
        if (connection.getResponseCode() == 200) { 
         bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
         while ((line = bufferedReader.readLine()) != null) { 
          result = line; 
         } 
        } else { 
         result = "Server Error"; 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } finally { 
        try { 
         if (outputStreamWriter != null) { 
          outputStreamWriter.close(); 
         } 
         if (connection != null) { 
          connection.disconnect(); 
         } 
         if (bufferedReader != null) { 
          bufferedReader.close(); 
         } 
         if (writer != null) { 
          writer.close(); 
         } 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
       return result; 
      case "posts": 
       String category = params[0]; 
       String date = params[1]; 
       // 
       OutputStreamWriter outputStreamWriter1 = null; 
       BufferedWriter writer1 = null; 
       BufferedReader bufferedReader1 = null; 
       HttpURLConnection connection1 = null; 

       String line1 = ""; 
       String result1 = null; 
       try { 
        URL url1 = new URL("http://192.168.1.64/blabla/posts.php"); 
        connection1 = (HttpURLConnection) url1.openConnection(); 
        connection1.setRequestMethod("POST"); 
        connection1.setDoOutput(true); 
        connection1.setDoInput(true); 
        connection1.setConnectTimeout(8000); 
        outputStreamWriter1 = new OutputStreamWriter(connection1.getOutputStream(), "UTF-8"); 
        writer1 = new BufferedWriter(outputStreamWriter1); 
        String parameters1 = "category="+category+"&date="+date; 
        writer1.write(parameters1); 
        writer1.flush(); 
        data = new ArrayList<>(); 
        if (connection1.getResponseCode() == 200) { 
         bufferedReader1 = new BufferedReader(new InputStreamReader(connection1.getInputStream())); 
         while ((line1 = bufferedReader1.readLine()) != null) { 
          data.add(line1); 
         } 
        } else { 
         result1 = "Server Error"; 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } finally { 
        try { 
         if (outputStreamWriter1 != null) { 
          outputStreamWriter1.close(); 
         } 
         if (connection1 != null) { 
          connection1.disconnect(); 
         } 
         if (bufferedReader1 != null) { 
          bufferedReader1.close(); 
         } 
         if (writer1 != null) { 
          writer1.close(); 
         } 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
       return result1; 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
     progressDialog.dismiss(); 
     switch (type) { 
      case "login": 
       switch (s) { 
        case "Connect Error": 
         createDialog(s); 
         break; 
        case "Done": 
         Toast.makeText(context, s, Toast.LENGTH_LONG).show(); 
         MainActivity.updateUI(true); 
         break; 
        case "Already Exist": 
         MainActivity.updateUI(true); 
         break; 
        case "Server Error": 
         createDialog(s); 
         break; 
       } 
       break; 
      case "posts": 
       if (data != null) { 
        PostsFragment.data = data; 
        PostsFragment.fillList(); 
        data = null; 
       } 
     } 
    } 

    private void createDialog(String message) { 
     builder = new AlertDialog.Builder(context); 
     builder.setTitle("Error"); 
     builder.setMessage(message); 
     builder.setCancelable(false); 
     builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.dismiss(); 
      } 
     }); 
     builder.create(); 
     builder.show(); 
    } 
} 
+0

添加您的MyCustomBaseAdapter代碼。 –

+0

你的哪一種方法改變了列表的數據。如果它在不同的活動,那麼你如何溝通2活動 –

+0

@kapsym我使用的服務器類擴展asynctask從服務器獲取數據。然後我調用'fillList',這是一個靜態func,用'data'變量填充lstview。 –

回答

0

你在PostsFragment.java words讓你重複的元素,在removeCommas()方法首先清除的話,然後從數值數據添加到words

+0

我不敢相信我是多麼愚蠢。謝謝人非常感謝。它是隱形的 –

0

嘗試。 searchResultses.clear();在addToClass開始()

static void addToClass() { 
 
     SearchResults s; 
 
     searchResultses.clear(); 
 
     int offset = 0; 
 
     for (int j = 0; j < words.size(); j += 8) { 
 
      Log.d(TAG, String.valueOf(words.size())); 
 
      s = new SearchResults(); 
 
      for (int i = 0; i < 8; i++) { 
 
       offset = 1; 
 
       s.add(words.get(i * offset)); 
 
      } 
 
      offset += 1; 
 
      s.init(); 
 
      searchResultses.add(s); 
 
     } 
 
    }

+0

我做了但仍然重複。我不知道發生了什麼事?從哪裏來的舊數據來自於我暫停時爲零? –

+0

public static ArrayList data = null; 。我猜測你在asyncTask中填充這些數據。可以張貼代碼我認爲問題可能在那裏你的removeCommas方法循環數據和addToClass依賴於單詞數組 –

+0

我添加了類。覈實 。我不認爲我循環null –

相關問題