2017-05-10 18 views
0

MySQLデータベースのデータをJSON形式で取得していて、カスタムリストのview.listビューに表示する時間が非常に長いです。今私はメインアクティビティのボタンをクリックすると、リストビューにリダイレクトされ、私が残したのと同じポジションになります。ありがとうございます。 リストビューの状態を保存してその状態に戻る方法

public class ShowParahDetail extends AppCompatActivity { 
ProgressDialog pd; 
CustomAdapter c; 
ArrayList<Ayah_textAR> ar_ayahAR; 
ArrayList<Ayah_textTR> ar_ayah_TR; 
JazzyListView lv; 
String intent_parah_ID; 
String intent_parahName; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_show_parah_detail); 
    intent_parah_ID=getIntent().getExtras().getString("parahID"); 
    intent_parahName=getIntent().getExtras().getString("parahName"); 
    setTitle(intent_parahName); 
    pd = new ProgressDialog(ShowParahDetail.this, R.style.pdtheme); 
    pd.setCancelable(false); 
    pd.setProgressStyle(android.R.style.Widget_ProgressBar_Small); 
    pd.show(); 
    lv= (JazzyListView) findViewById(R.id.lvparahDetail); 

    ar_ayahAR = new ArrayList<>(); 
    ar_ayah_TR = new ArrayList<>(); 
    ShowDataAR(); 
    ShowTranslationUR(); 
} 

private void ShowTranslationUR() { 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      String RecievedString = ""; 
      HashMap<String, String> params = new HashMap<String, String>(); 
      params.put("parahid", intent_parah_ID); 
      Network network = new Network("showParahTranslationUR.php", params); 

      try { 
       try { 
        Thread.sleep(500); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       RecievedString = network.ToRecieveDataFromWeb(); 
       JsonParsing jsonparsing = new JsonParsing(RecievedString); 
       ArrayList<HashMap<String, String>> convertedarraydata = jsonparsing.ParsejsonArray(RecievedString); 
       for (int i = 0; i < convertedarraydata.size(); i++) { 
        HashMap<String, String> positionHashmap; 
        positionHashmap = convertedarraydata.get(i); 

        String str_ayahText = positionHashmap.get("verseText"); 
        String str_verseID = positionHashmap.get("verse_id"); 
        String str_surahID = positionHashmap.get("surah_id"); 


        Ayah_textTR ayahTR = new Ayah_textTR(); 
        ayahTR.ayah_textTR = str_ayahText; 
        ayahTR.verse_id = str_verseID; 
        ayahTR.surah_id = str_surahID; 
        ar_ayah_TR.add(ayahTR); 
       } 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }).start(); 
} 

private void ShowDataAR() { 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      String RecievedString = ""; 
      HashMap<String, String> params = new HashMap<String, String>(); 
      params.put("parahid", intent_parah_ID); 
      Network network = new Network("showParahDetails.php", params); 

      try { 
       try { 
        Thread.sleep(500); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       RecievedString = network.ToRecieveDataFromWeb(); 
       JsonParsing jsonparsing = new JsonParsing(RecievedString); 
       ArrayList<HashMap<String, String>> convertedarraydata = jsonparsing.ParsejsonArray(RecievedString); 
       for (int i = 0; i < convertedarraydata.size(); i++) { 
        HashMap<String, String> positionHashmap; 
        positionHashmap = convertedarraydata.get(i); 
        String str_ayahID = positionHashmap.get("verse_id"); 
        String str_ayahText = positionHashmap.get("verseText"); 

        Ayah_textAR ayahText = new Ayah_textAR(); 
        ayahText.ayah_id = str_ayahID; 
        ayahText.ayah_textAR = str_ayahText; 
        ar_ayahAR.add(ayahText); 
       } 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
       if (ShowParahDetail.this == null) 
        return; 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Parcelable state = lv.onSaveInstanceState(); 
         lv.onRestoreInstanceState(state); 
         c = new CustomAdapter(ShowParahDetail.this, R.layout.cstm_parah, R.id.tv_parahNAME, ar_ayahAR); 
         lv.setAdapter(c); 
         if(pd!=null){ 
          pd.dismiss(); 
          pd = null; 
         } 
        } 
       }); 
      } 
     } 
    }).start(); 
} 


class CustomAdapter extends ArrayAdapter<Ayah_textAR> { 
    public CustomAdapter(Context context, int resource, int textViewResourceId, ArrayList<Ayah_textAR> objects) { 
     super(context, resource, textViewResourceId, objects); 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View v = inflater.inflate(R.layout.cstm_ayah, parent, false); 

     final TextView tv_ayah_text = (TextView) v.findViewById(R.id.tv_ayahText); 
     final TextView tv_ayahTR = (TextView) v.findViewById(R.id.tv_ayahTR); 

     try { 
      Ayah_textAR ayah = ar_ayahAR.get(position); 
      tv_ayah_text.setText(ayah.ayah_id + " : " + ayah.ayah_textAR); 
      Ayah_textTR parahTR = ar_ayah_TR.get(position); 
      tv_ayahTR.setText(parahTR.ayah_textTR); 
     }catch (Exception e){ 
      notifyDataSetChanged(); 
     } 

     }); 
     return v; 
    } 
} 
public class Ayah_textAR { 
    String ayah_id; 
    String ayah_textAR; 
} 
public class Ayah_textTR { 
    String verse_id; 
    String ayah_textTR; 
    String surah_id; 
} 



@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (pd != null) { 
     pd.dismiss(); 
     pd = null; 
    } 
} 

}

+0

あなたが他のアクティビティを意図しているときにリストのアクティビティを終了しないでください。また、リストのアクティビティをリストに戻したいときは、ボタンをクリックするとonBackPressed()を呼び出すだけです。 – JavadKhan

+0

はい、@ JavadKhanが正しいです、あなたのリストの活動を終了しないでください。 –

+0

私は3つのアクティビティA、B、Cを持っています。私はBアクティビティとCアクティビティのリストビューを持っています。 Aアクティビティのボタンを押したときアクティビティBアクティビティが開き、リストビューとアイテムクリックCアクティビティが開き、リストビューにデータがロードされます。私はリストビューの30位のCアクティビティにいて、Aアクティビティに戻ります。再開ボタンを押すと、Cアクティビティを30番目に表示します。 –

答えて

0

次の3つの活動を持って、A、BおよびCは、意図して、あなたの活動のBを起動します。また、あなたの活動Cをインテントで開始します。次に、アクティビティーAを開始し、Cに存在するデータを保管したい場合は、アクティビティーAをインテントで開始します。あなたのアクティビティCを終了しないでください。アクティビティCを再開するには、アクティビティAからonBackPressed()に電話してください。アクティビティの終了を忘れないでください。A.このコールの場合はonFinish()です。

+0

アクティビティAが主なアクティビティです。 Bアクティビティでクリックされたアイテムに異なるデータがロードされたアクティビティCが守られるたびに、 –

+0

アクティビティCからアクティビティAを開く場合は、そのようにする必要があります。 onBackPressed()を呼び出すと、アクティビティCが再開されますが、アクティビティBからアクティビティCを呼び出す場合は、アクティビティCをインテントとともに再作成します。 – JavadKhan

+0

もしアプリケーションを永久に閉じてからもう一度開くと、前の状態でAからCアクティビティにアクセスできますか? –

関連する問題