2017-01-18 6 views
0

2つのリストビューと2つのアダプタを持つレイアウトがあります。最初のリストは、Webサービスコールの最初の人物を表示したいだけです。 2番目のリストビュー私は彼らがその人に報告するときに私が得たリストを表示したい。ユーザーが2番目のリストをクリックすると、それらからのパラメータを使ってWeb呼び出しを行います。リストビューを更新する新しいアクティビティには行かずにWebサービスコールから2リストビューを表示

新しいリストを取得し、そのリストビューをリフレッシュして別のアクティビティに移動しないように、もう一度paramを呼び出して2番目のリストビューを更新するにはどうすればよいですか?私はウェブサービスを正しく作ることができますが、私は新しい活動に行きます。 2番目のlistviewの新しいデータと、ユーザーがトップリストビューに表示するためにクリックした人物のリストビューを更新したいだけです。私はbottomListViewはちょうど別のアクティビティに行くことなく、新しいデータを表示するリストビューを更新するために取得する方法を確認していないよう

public class MainActivity extends AppCompatActivity { 

    ListView mMangerList, directReportListView; 
    ProgressBar mProgressBar; 
    ArrayList<PeepWithPic> mPeepWithPics = new ArrayList<>(); 
    TopListViewAdapter mTopListViewAdapter; 
    BottomListViewAdapter mBottomListViewAdapter; 
    DatabaseHandler databaseHandler; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     /* if toolbar is wanted by user uncomment 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar);*/ 

     mMangerList = (ListView) findViewById(R.id.mManagerList); 
     directReportListView = (ListView) findViewById(R.id.mDirectReportList); 
     mProgressBar = (ProgressBar) findViewById(R.id.progressBar); 
     mProgressBar.setVisibility(View.VISIBLE); 
     mTopListViewAdapter = new TopListViewAdapter(this, mPeepWithPics); 
     mBottomListViewAdapter = new BottomListViewAdapter(this, mPeepWithPics); 
     mMangerList.setAdapter(mTopListViewAdapter); 
     directReportListView.setAdapter(mBottomListViewAdapter); 
     getXMLData(); 

     /*databaseHandler = new DatabaseHandler(getApplicationContext()); 


     List<PeepWithPic> peepPic = databaseHandler.getAllContacts(); 
     for (PeepWithPic pwc : peepPic) { 
      String log = "ID: " +pwc.getEmployee_number()+" ,First Name: " + pwc.getFirst_name() + 
        " ,Last Name: " + pwc.getLast_name() + " ,Title: " + pwc.getPayroll_title(); 
      Log.d("PEEP ", log); 
     }*/ 
    } 

    //Uncomment to add OptionsMenu(three dots on app bar) if needed 
    /*@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    }*/ 

    private static OkHttpClient getUnsafeOkHttpClient() { 
     try { 
      // Create a trust manager that does not validate certificate chains 
      final TrustManager[] trustAllCerts = new TrustManager[]{ 
        new X509TrustManager() { 
         @Override 
         public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { 
         } 

         @Override 
         public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { 
         } 

         @Override 
         public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
          return new java.security.cert.X509Certificate[]{}; 
         } 
        } 
      }; 

      // Install the all-trusting trust manager 
      final SSLContext sslContext = SSLContext.getInstance("SSL"); 
      sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); 
      // Create an ssl socket factory with our all-trusting manager 
      final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); 

      OkHttpClient.Builder builder = new OkHttpClient.Builder(); 
      builder.connectTimeout(5, TimeUnit.MINUTES) 
        .writeTimeout(5, TimeUnit.MINUTES) 
        .readTimeout(5, TimeUnit.MINUTES); 
      builder.sslSocketFactory(sslSocketFactory); 
      builder.hostnameVerifier(new HostnameVerifier() { 
       @Override 
       public boolean verify(String hostname, SSLSession session) { 
        return true; 
       } 
      }); 

      return builder.build(); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 

    public void getXMLData() { 
     OkHttpClient client = getUnsafeOkHttpClient(); 
     Request request = new Request.Builder() 
       .url(getString(R.string.API_FULL_URL)) 
       .build(); 
     client.newCall(request).enqueue(new Callback() { 
      @Override 
      public void onFailure(Call call, IOException e) { 
       e.printStackTrace(); 
      } 

      @Override 
      public void onResponse(Call call, final Response response) throws IOException { 
       final String responseData = response.body().string(); 
       final InputStream stream = new ByteArrayInputStream(responseData.getBytes()); 
       XMLPullParserHandler parserHandler = new XMLPullParserHandler(); 
       final ArrayList<PeepWithPic> peepWithPics = (ArrayList<PeepWithPic>) parserHandler.parse(stream); 
       mPeepWithPics.clear(); 
       mPeepWithPics.addAll(peepWithPics); 

       ContentValues contentValues = new ContentValues(); 

       //tell adapter on the UI thread its data changed 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         mTopListViewAdapter.notifyDataSetChanged(); 
         mBottomListViewAdapter.notifyDataSetChanged(); 
         mMangerList.setVisibility(View.VISIBLE); 
         directReportListView.setVisibility(View.VISIBLE); 
         mProgressBar.setVisibility(View.GONE); 
        } 
       }); 
      } 
     }); 
    } 

} 


public class TopListViewAdapter extends ArrayAdapter<PeepWithPic> { 

    public TopListViewAdapter(Context context, ArrayList<PeepWithPic> peepWithPic) { 
     super(context, 0, peepWithPic); 
    } 

    @NonNull 
    @Override 
    public View getView(final int position, View convertView, @NonNull final ViewGroup parent) { 
     final PeepWithPic peepWithPic = getItem(position); 
     final AppViewHolder holder; 

     convertView = LayoutInflater.from(getContext()).inflate(R.layout.contact_cardview_layout, parent, false); 
     holder = new AppViewHolder(); 

     holder.tvFirstName = (TextView) convertView.findViewById(R.id.personFirstName); 
     holder.tvLastName = (TextView) convertView.findViewById(R.id.personLastName); 
     holder.tvTitle = (TextView) convertView.findViewById(R.id.personTitle); 
     holder.mPeepPic = (ImageView) convertView.findViewById(R.id.person_photo); 
     holder.mDetailsButton = (ImageButton) convertView.findViewById(R.id.fullDetailButton); 
     holder.mCardView = (CardView) convertView.findViewById(R.id.home_screen_cardView); 

     if (peepWithPic != null) { 
      holder.tvFirstName.setText(peepWithPic.getFirst_name()); 
      holder.tvLastName.setText(peepWithPic.getLast_name()); 
      holder.tvTitle.setText(peepWithPic.getPayroll_title()); 

      if (peepWithPic.getThumbnailData() != null) { 
       String peepPicData = peepWithPic.getThumbnailData(); 
       byte[] imageAsBytes = Base64.decode(peepPicData.getBytes(), Base64.DEFAULT); 
       Bitmap parsedImage = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length); 
       holder.mPeepPic.setImageBitmap(parsedImage); 
      } 

      holder.mDetailsButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Toast.makeText(getContext(),"This is working as expect for now", Toast.LENGTH_LONG).show(); 
       } 
      }); 

      holder.mCardView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        String peepWithPic1 = peepWithPic.getEmployee_number(); 
        Intent mIntent = new Intent(view.getContext(), MainActivity.class); 
        mIntent.putExtra("Employee_number", peepWithPic1); 
        mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        view.getContext().startActivity(mIntent); 
       } 
      }); 

      convertView.setTag(holder); 
     } 
     return convertView; 
    } 

    public class AppViewHolder { 
     private TextView tvFirstName; 
     private TextView tvLastName; 
     private TextView tvTitle; 
     private ImageView mPeepPic; 
     private ImageButton mDetailsButton; 
     private CardView mCardView; 

    } 

他のアダプタは同じです。

私はTopListViewAdapterのためにMainAcitivy.classが必要ではありませんが、私はTopListViewAdapterを求めていますが、解析された応答の最初の人物を取得する方法もわかりません。

答えて

0

ArrayListはスレッドセーフではないため、mPeepWithPicsをメインスレッド外に変更しないでください。 runOnUiThreadに変更コードを入れてください。あるいは、もっと良い方法として、ArrayAdapter(ArrayAdapter.clear()ArrayAdapter.addAll())のそれぞれのメソッドを使用することをお勧めします。

関連する問題