2016-04-24 14 views
0

ウェブサイトからjsonアレイを取得するアプリケーションを作成しています。そのjson配列にはタイトル、説明、イメージが含まれています。私はコードとカスタムリストビューアダプタを記述します。リストが表示されていますが、今はどのリスト項目をクリックするのかをトーストする必要があります。私はたくさん試して検索したが、解決策は得られなかった。カスタムリストビューでトーストが表示されない

助けてください。

ViewCampaigns.java(Main.javaとして扱われる)

package com.therightsol.saveasoul.saveasoul; 

import android.app.AlertDialog; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.ProgressBar; 
import android.widget.Toast; 

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

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

public class viewcampaigns extends AppCompatActivity { 

    // Progress Dialog 
    private ProgressDialog pDialog; 
    private ProgressBar progress; 
    ListView lv = null; 
    MyData arrData[] = null; 
    ArrayList<String> arrlist = null; 
    // url to get all products list 
    private static String url_all_campaigns = "http://therightsol.com/saveasoul125/mobile/get_all_campaigns_jsonArr"; 
    private AlertDialog alert; 
    // products JSONArray 
    String response = ""; 
    JSONArray jsonArr = null; 
    ArrayAdapter<String> campaignAdapter; 
    ListAdapter la; 



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



     progress = (ProgressBar) findViewById(R.id.progressBar1); 
     lv = (ListView) findViewById(R.id.listView); 

     ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

     if (mWifi.isConnected()) { 
      // Do whatever 
      // Loading campaigns in Background Thread 
      LoadAllCampaigns task = new LoadAllCampaigns(); 
      task.execute(); 

     }else { 
      /*new AlertDialog.Builder(viewcampaigns.this) 
        .setTitle("Your Alert") 
        .setMessage("Your Message") 
        .setCancelable(false) 
        .setPositiveButton("ok", new OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          // Whatever... 
         } 
        }).create().show();*/ 
     } 



     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       String t = (String) la.getItem(position); 
       Toast.makeText(getApplicationContext(),"HIIII", Toast.LENGTH_SHORT).show(); 
      } 
     }); 


    } 

    class MyData{ 
     public String imgpath; 
     public String title; 
     public String shrtdes; 

     public MyData(){ 
      super(); 
     } 

     public MyData(String path, String t, String desc){ 
      this.imgpath = path; 
      this.title = t; 
      this.shrtdes = desc; 
     } 
    } 




    /** 
    * Background Async Task to Load all campaigns by making HTTP Request 
    * */ 
    class LoadAllCampaigns extends AsyncTask<String, Void, String> { 




     /** 
     * Before starting background thread Show Progress Dialog 
     * */ 
     @Override 
     protected void onPreExecute() { 
      //Log.i("save a soul", "I am in preexecute."); 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(viewcampaigns.this); 
      pDialog.setMessage("Loading Campaigns. Please wait..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

     /** 
     * getting All campaigns from url 
     * */ 
     protected String doInBackground(String... params) { 
      Log.i("save a soul", "I am in doinbackground"); 
      //http post 
      try{ 
       //System.out.println("The output of : doInBackground " +params[0]); 
       URL url = new URL(url_all_campaigns); 
       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
       conn.setRequestMethod("POST"); 
       conn.setDoOutput(true); 
       conn.setConnectTimeout(10000); 
       conn.setReadTimeout(10000); 
       System.out.println("The output of getResponsecode: " + conn.getResponseCode()); 
       conn.connect(); 

       String line; 
       BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

       while ((line = br.readLine()) != null) { 
        response += line; 

       } 
       return response; 
      } catch (IOException e) { 

       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      pDialog.hide(); 
      // updating UI from Background Thread 

      Log.i("Save Test", s); 

      try { 
       jsonArr = new JSONArray(response); 


       int l = jsonArr.length(); 
       arrData = new MyData[l]; 

       for (int i = 0; i < jsonArr.length(); i++) 
       { 
        JSONObject jsonObj = jsonArr.getJSONObject(i); 

        System.out.println(jsonObj); 
        String path = String.valueOf(jsonObj.getString("campaign_image_path")); 
        String title = String.valueOf(jsonObj.getString("campaign_title")); 
        String shrtdes = String.valueOf(jsonObj.getString("campaign_short_description")); 

        path = "http://therightsol.com/saveasoul125/" + path; 

        Log.i("save a soul", "I am in onPostExecute"); 

        arrData[i] = new MyData(path, title, shrtdes); 
       } 


       la = new campaigns_customAdapter(viewcampaigns.this, R.layout.campaignslist, arrData); 


       /*ListAdapter la = new campaigns_customAdapter(
        viewcampaigns.this, title, camp 
       );*/ 


       lv.setAdapter(la); 

       lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
         String t = (String) la.getItem(position); 
         Toast.makeText(getApplicationContext(),position, Toast.LENGTH_SHORT).show(); 
        } 
       }); 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } 
    } 



    @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); 
    } 
} 

キャンペーン持つカスタムアダプタ

package com.therightsol.saveasoul.saveasoul; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.io.InputStream; 
import java.net.MalformedURLException; 
import java.net.URL; 


public class campaigns_customAdapter extends ArrayAdapter<viewcampaigns.MyData> { 


    viewcampaigns.MyData [] obj; 
    Context context; 
    int resourse; 


    public campaigns_customAdapter(Context context, int resource, viewcampaigns.MyData[] objects) { 

     super(context, resource, objects); 

     this.context=context; 
     this.resourse=resource; 
     this.obj=objects; 

    } 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = LayoutInflater.from(getContext()); 
     //View v = inflater.inflate(R.layout.campaignslist, parent, false); 

     View row=inflater.inflate(resourse,parent,false); 


     // Getting Views 
     TextView title = (TextView) row.findViewById(R.id.campaignTitle); 
     TextView shrtDesc = (TextView) row.findViewById(R.id.shortDescription); 
     ImageView campaignimg = (ImageView) row.findViewById(R.id.campaignimage); 


     title.setText(obj[position].title); 
     shrtDesc.setText(obj[position].shrtdes); 

     // Inflating Image 
     try { 
      URL url = new URL(obj[position].imgpath); 

      new DownloadImageTask(campaignimg) 
        .execute(url.toString()); 

     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } 
     return row; 
    } 


    private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
     ImageView bmImage; 

     public DownloadImageTask(ImageView bmImage) { 
      this.bmImage = bmImage; 
     } 

     protected Bitmap doInBackground(String... urls) { 
      String urldisplay = urls[0]; 
      Bitmap mIcon11 = null; 
      try { 
       InputStream in = new java.net.URL(urldisplay).openStream(); 
       mIcon11 = BitmapFactory.decodeStream(in); 
      } catch (Exception e) { 
       Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 
      return mIcon11; 
     } 

     protected void onPostExecute(Bitmap result) { 
      bmImage.setImageBitmap(result); 
     } 
    } 
} 

活動キャンペーンの.xml(XMLファイルリストビュー)

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 

    <ProgressBar 
     android:id="@+id/progressBar1" 
     style="?android:attr/progressBarStyleHorizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:indeterminate="false" 
     android:max="10" 
     android:padding="4dip" > 
    </ProgressBar> 

    <ListView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/listView" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     /> 
</RelativeLayout> 

キャンペーンのリスト(リスト項目のカスタム・レイアウト用XML)の代わりに、あなたのトーストの文の使用ViewCampaigns.thisにgetApplicationContext()を使用しての

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:id="@+id/campaignimage" 
     android:backgroundTintMode="src_over" 
     android:clickable="false" 
     android:cropToPadding="false" 
     android:layout_alignTop="@+id/campaignTitle" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_marginLeft="6dp" 
     android:layout_marginRight="6dp" 
     android:maxLength="4" 
     android:ellipsize="end" 
     android:layout_marginBottom="0dp" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="30dp" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Title" 
     android:id="@+id/campaignTitle" 
     android:layout_alignParentTop="true" 
     android:layout_alignRight="@+id/campaignimage" 
     android:layout_alignEnd="@+id/campaignimage" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentEnd="true" 
     android:capitalize="words" 
     android:textStyle="bold" 
     android:layout_marginLeft="112dp" 
     android:layout_marginRight="12dp" 
     android:layout_marginTop="6dp" 
     android:typeface="monospace" 
     android:textColor="#1f6b88" 
     android:textSize="16dp" 
     android:layout_marginBottom="4dp" 
     android:padding="3dp" /> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="66dp" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:text="Small Text" 
     android:id="@+id/shortDescription" 
     android:typeface="sans" 
     android:textStyle="normal" 
     android:textSize="12dp" 
     android:paddingLeft="3dp" 
     android:textColor="#2586a9" 
     android:layout_below="@+id/campaignTitle" 
     android:layout_alignLeft="@+id/campaignTitle" 
     android:layout_alignStart="@+id/campaignTitle" 
     android:maxLength="14" 
     android:ellipsize="end" 
     android:layout_marginRight="12dp" 
     android:paddingTop="2dp" 
     android:paddingRight="3dp" 
     android:paddingBottom="3dp" /> 

</RelativeLayout> 

答えて

0

。あなたの問題を解決するはずです。

+0

私はViewCampaigns.thisを試しましたが、まだ動作していません。 –

関連する問題