2016-10-27 3 views
1

私の質問をチェックしていただきありがとうございます!は囲みクラスではありません/新しいインテントは解決できませんコンストラクタ

私は、私は私のレイアウトに追加する各ImageViewのにonClickListenerを追加しますrelativly ismpleループを持っていることへの新しい意思を追加しようとしたときしかし、それは私に次のいずれかのエラーを与える:

String[] imageURLs = imageURLsString.split("/"); 
    for (int i = 0; i < imageURLs.length; i++){ 
     ImageView image = new ImageView(this); 
     image.setLayoutParams(new android.view.ViewGroup.LayoutParams(getPx(182),getPx(256))); 
     image.setPadding(getPx(3),getPx(3),getPx(3),getPx(3)); 
     final String imageURL = ".../images/" + imageURLs[i]; 
     Picasso.with(this).load(imageURL).into(image); 

     image.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent; 
       intent = new Intent(this, ImageActivity.class); 
       intent.putExtra("URL", imageURL); 
       startActivity(intent); 
      } 
     }); 
     linearLayout.addView(image); 
    } 

"コンストラクター 'インテント....解決できません"というエラーが発生します。 は、だから私は解決策を探していたとき、人々は

String[] imageURLs = imageURLsString.split("/"); 
    for (int i = 0; i < imageURLs.length; i++){ 
     ImageView image = new ImageView(this); 
     image.setLayoutParams(new android.view.ViewGroup.LayoutParams(getPx(182),getPx(256))); 
     image.setPadding(getPx(3),getPx(3),getPx(3),getPx(3)); 
     final String imageURL = ".../images/" + imageURLs[i]; 
     Picasso.with(this).load(imageURL).into(image); 

     image.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent; 
       intent = new Intent(MainActivity.this, ImageActivity.class); 
       intent.putExtra("URL", imageURL); 
       startActivity(intent); 
      } 
     }); 
     linearLayout.addView(image); 
    } 

「これ」を「MainActivity.this」に変更することを提案、しかし...になった:com.myName.appName.MainActivity囲むクラスではありません

public class ImageActivity extends AppCompatActivity { 

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

     String URL = getIntent().getExtras().getString("URL"); 

     ImageView imageView = (ImageView) findViewById(R.id.image); 
     imageView.getLayoutParams().height = (int) (imageView.getLayoutParams().width * (Float.valueOf(String.valueOf(1.41)))); 
     Picasso.with(this).load(URL).into(imageView); 
    } 

奇妙なことは、私がアプリケーションを作成すると私のプレイ時間の間に、多くの新しいテントのを行っているということですが、私はこの1つを解決するように見えるカント:ここ

はImageActivityクラスです。私はここで何が欠けていますか? HERE

public class DetailsActivity extends AppCompatActivity { 


    TextView TVWeChatIdValue; 

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

     String dataString = getIntent().getExtras().getString("dataString"); 
     String[] itemData = dataString.split(","); 
     String category = itemData[0]; 
     Log.e("DetailsActivity", category); 
     String itemID = itemData[1]; 
     Log.e("DetailsActivity", itemID); 
     String imageURLsString = itemData[2]; 
     Log.e("DetailsActivity", imageURLsString); 
     String description = itemData[3]; 
     Log.e("DetailsActivity", description); 
     String price = itemData[4]; 
     Log.e("DetailsActivity", price); 

     String itemCode = category + itemID; 

     TextView textView; 
     textView = (TextView) findViewById(R.id.Title); 
     textView.setText(getResources().getString(R.string.app_name)); 
     textView = (TextView) findViewById(R.id.ItemReferralValue); 
     textView.setText(itemCode); 
     textView = (TextView) findViewById(R.id.ItemPriceValue); 
     textView.setText(price); 

     TVWeChatIdValue = (TextView) findViewById(R.id.WeChatIDValue); 
     new DatabaseTask(this, "details", "GETWECHATID").execute(); 

     LinearLayout linearLayout = (LinearLayout) findViewById(R.id.ItemDetailsContent); 

     String[] imageURLs = imageURLsString.split("/"); 
     for (int i = 0; i < imageURLs.length; i++){ 
      ImageView image = new ImageView(this); 
      image.setLayoutParams(new android.view.ViewGroup.LayoutParams(getPx(182),getPx(256))); 
      image.setPadding(getPx(3),getPx(3),getPx(3),getPx(3)); 
      final String imageURL = ".../images/" + imageURLs[i]; 
      Picasso.with(this).load(imageURL).into(image); 

      image.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Intent intent; 
        intent = new Intent(this, ImageActivity.class); 
        intent.putExtra("URL", imageURL); 
        startActivity(intent); 
       } 
      }); 
      linearLayout.addView(image); 
     } 

     ImageView imageView = (ImageView) findViewById(R.id.ItemDetailsDescription); 
     String imageURL = ".../images/" + description; 
     Picasso.with(this).load(imageURL).into(imageView); 

    } 

    public void SetWeChatId(String mValue) { 
     TVWeChatIdValue.setText(mValue); 
    } 

    public int getPx(int dimensionDp) { 
     float density = getResources().getDisplayMetrics().density; 
     return (int) (dimensionDp * density + 0.5f); 
    } 
} 

WORKING CODE

public class MainActivity extends AppCompatActivity { 

    TextView TVWeChatIdValue; 
    LinearLayout linearLayout; 

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

     TextView textView; 
     textView = (TextView) findViewById(R.id.Title); 
     textView.setText(getResources().getString(R.string.app_name)); 
     textView = (TextView) findViewById(R.id.SubTitle); 
     textView.setText(getResources().getString(R.string.slogan)); 

     textView = (TextView) findViewById(R.id.MoreForWomen); 
     textView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       OpenCatalog("women"); 
      } 
     }); 
     textView = (TextView) findViewById(R.id.MoreForMen); 
     textView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       OpenCatalog("men"); 
      } 
     }); 
     textView = (TextView) findViewById(R.id.MoreForKids); 
     textView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       OpenCatalog("kids"); 
      } 
     }); 
    } 

    public void GetData() { 
      TVWeChatIdValue = (TextView) findViewById(R.id.WeChatIDValue); 
      new DatabaseTask(this, "main", "GETWECHATID").execute(); 

      linearLayout = (LinearLayout) findViewById(R.id.NewItemsForWomenContent); 
      linearLayout.removeAllViewsInLayout(); 
      new DatabaseTask(this, linearLayout, "WOMEN", "GETNEWESTITEMS").execute(); 
      linearLayout = (LinearLayout) findViewById(R.id.NewItemsForMenContent); 
      linearLayout.removeAllViewsInLayout(); 
      new DatabaseTask(this, linearLayout, "MEN", "GETNEWESTITEMS").execute(); 
      linearLayout = (LinearLayout) findViewById(R.id.NewItemsForKidsContent); 
      linearLayout.removeAllViewsInLayout(); 
      new DatabaseTask(this, linearLayout, "KIDS", "GETNEWESTITEMS").execute(); 
    } 

    public void SetWeChatId(String mValue) { 
     TVWeChatIdValue.setText(mValue); 
    } 

    public void ProcessNewItems(LinearLayout mLinearLayout, final String mCategory, final HashMap<Integer, Item> mItems){ 
     for (int i = 0; i < mItems.size(); i++) { 
      ImageView image = new ImageView(this); 
      image.setLayoutParams(new android.view.ViewGroup.LayoutParams(getPx(96),getPx(128))); 
      image.setPadding(getPx(3),getPx(3),getPx(3),getPx(3)); 
      String imageURL = ".../images/" + mItems.get(i).getImageURLs()[0]; 
      Picasso.with(this).load(imageURL).into(image); 

      mLinearLayout.addView(image); 
      final int index = i; 
      image.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        ShowItemDetails(mCategory, mItems.get(index)); 
       } 
      }); 
     } 
    } 

    void ShowItemDetails(String mCategory, Item mItem){ 
     Intent intent = new Intent(this, DetailsActivity.class); 
     intent.putExtra("dataString", mItem.GetDataString()); 
     Log.e("CatalogActivity", mItem.GetDataString()); 
     startActivity(intent); 
    } 

    void OpenCatalog(String mCategory){ 
     //show catalog 
     Intent intent = new Intent(this, CatalogActivity.class); 
     intent.putExtra("category", mCategory); 
     startActivity(intent); 
    } 

    public int getPx(int dimensionDp) { 
     float density = getResources().getDisplayMetrics().density; 
     return (int) (dimensionDp * density + 0.5f); 
    } 

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

     GetData(); 
    } 

} 
+0

エラーメッセージ全体を投稿してください。切り詰めることによって、あなたが助けになるために必要な情報を削除する可能性があります。また、Javaでは、すべての実行可能コードはクラス内のメソッドに属しています。特に、どのクラスとメソッドに 'onClickListener()'を設定するコードが含まれていますか?このコンテキストを私たちに与えると、コードスニペットをよりよく理解するのに役立ちます。 –

+0

こんにちは@コード弟子、あなたの返信のおかげで。私はOPで完全なコードを追加しました。私はまた、OnCreateから取り出し、別のメソッドでonClickListenerの設定をやってみましたが、やはり問題はありません。 – sdieters

+0

オリジナルのコードスニペットを編集して、.javaファイルと同じように、クラス内のメソッド内にあるようにする必要があります。追加したコードには、あなたの質問とは関係のない多くの行があります。 –

答えて

1

OnClickListenerを作成するコードを含むActivityサブクラスの名前を使用する必要があります。多くの例では、これはMainActivityです。しかし、これはあなたのコードではそうではないようです。あなたがDetailsActivityをという名前のクラスであるので、その名前を使用します。私はここにあなたのコードを見ることができるものから、

Intent intent = new Intent(DetailsActivity.this, ImageActivity.class); 

を、私は強くあなたがおよそListViewRecyclerViewを学ぶことを示唆しています。彼らはちょっと複雑ですが、一度理解すれば、ここでやろうとしていることに似た、あなたの仕事の多くをやります。 1つは、表示されるだけ多くのビューを作成するため、独自のコードより効率的です。

はのは、あなたの他の例を詳しく見てみましょう:ShowItemDetails()MainActivityクラス内であることを

public class MainActivity extends AppCompatActivity { 
    // ... 
    void ShowItemDetails(String mCategory, Item mItem){ 
     Intent intent = new Intent(this, DetailsActivity.class); 
     intent.putExtra("dataString", mItem.GetDataString()); 
     startActivity(intent); 
    } 
} 

注意してください。したがっては、Contextが必要な場所で使用できるそのクラスのインスタンスを指します。 (これについての詳細は、継承と多型について読む必要があります。一方)

、元のコードがContextとして使用することができないOnClickListenerの匿名のサブクラス内にある方法でIntentを作成します。しかし、匿名の内部クラスはContextを継承するDetailsActivityのメソッド内にあります。この外部クラスのインスタンスにアクセスするには、DetailsActivity.thisを使用する必要があります。

詳細については、thisリファレンスと内部クラスについての詳細をご覧ください。

+0

私は断片や他の特別なものを使用していません。これはOnCreateメソッドに配置されました。 OPの完全なコードを参照してください。ありがとう! – sdieters

+0

@sdieters私の編集を参照してください。 –

+0

ああ、それは仕事をした! OnCreateメソッドで行う代わりにonClickListenerを設定するメソッドを呼び出すことで、以前に試した方法で動作するクラスをOPに追加しました。そこに私は "これ"の前にクラスを設定しなければなりませんでした。違いがどこにあるのか教えていただけますか?再度多くのありがとう! – sdieters

1

FROM

FULL CODEあなたはOnClickListenerを設定されているものActivityサブクラスに変更MainActivity.thisこのブロック

image.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     Intent intent; 
     intent = new Intent(MainActivity.this, ImageActivity.class); 
     intent.putExtra("URL", imageURL); 
     startActivity(intent); 
    } 
}); 

を持っています。あなたの場合はDetailsActivity.thisになります。基本的に囲みアクティビティは、Activityが定義されているクラスファイルの名前(Activityクラスの名前)を意味します。このActivityは、匿名の内部クラスを渡す.setOnClickListener()への呼び出しをカプセル化します。 DetailsActivityの中にを封入していますので、名前封入活動です。希望が意味する

+0

すでにこれを試みましたが、私のケースではEnclosingアクティビティが何であるべきかを理解できないようです。フルコードがOPに追加されました。ありがとう! – sdieters

+0

@sdieters私の編集を参照してください – Dummy

関連する問題