2017-03-14 2 views
-4

내 앱용 시스템에 일종의 기호를 만들고 사용자가 세부 정보를 추가하고 목록에서 선택할 수있는 지점까지 작업하고 있습니다.ListViewItem을 클릭 할 때 새 액티비티로 이동

사용자가 UserInput 클래스에 정보를 입력하면이 정보는 Firebase 데이터베이스에 저장됩니다. 그런 다음 데이터가 ListView 항목에 표시되지만 먼저 CustomAdapter 클래스에 배치됩니다. 이 수업은 내 문제가있는 곳입니다.

사용자는 setOnClickListener()를 통해이 목록보기와 상호 작용할 수 있습니다. 목록의 항목을 선택하면 프로그램에 토스트가 표시되고 문제가없는 것으로 표시됩니다. 지금 알아 내고자하는 것은 사용자가 자신의 이름과 세부 정보가 포함 된 목록보기 항목을 클릭하면 Menu_Activity.java라는 주 메뉴 활동으로 바로 이동하도록하는 것입니다.

메시지 Gradle을

Error:(71, 44) error: no suitable constructor found for Intent(<anonymous OnClickListener>,Class<Menu_Activity>) 
constructor Intent.Intent(String,Uri) is not applicable 
(argument mismatch; <anonymous OnClickListener> cannot be converted to String) 
constructor Intent.Intent(Context,Class<?>) is not applicable 
(argument mismatch; <anonymous OnClickListener> cannot be converted to Context) 
error:cannot find symbol method startActivity(Intent) 

CustomAdapter.java

package uk.ac.napier.newsreader.Details_UI; 

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

import java.util.ArrayList; 

import uk.ac.napier.newsreader.Home_Screen_Activity; 
import uk.ac.napier.newsreader.Menu_Activity; 
import uk.ac.napier.newsreader.R; 
import uk.ac.napier.newsreader.Details_UserInput.User; 
import uk.ac.napier.newsreader.Routes_Activity; 

/** 
* Created by MarkB on 14/03/2017. 
*/ 

public class CustomAdapter extends BaseAdapter { 
    Context c; 
    ArrayList<User> users; 

    public CustomAdapter (Context c, ArrayList<User> users) { 
     this.c = c; 
     this.users = users; 
    } 

    @Override 
    public int getCount() { 
     return users.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return users.get(position); 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView==null) 
     { 
      convertView = LayoutInflater.from(c).inflate(R.layout.model,parent,false); 
     } 

     TextView nameTxt = (TextView) convertView.findViewById(R.id.nameTxt); 
     TextView ageTxt = (TextView) convertView.findViewById(R.id.ageTxt); 
     TextView weightTxt = (TextView) convertView.findViewById(R.id.weightTxt); 

     final User u = (User) this.getItem(position); 

     nameTxt.setText(u.getName()); 
     ageTxt.setText(u.getAge()); 
     weightTxt.setText(u.getWeight()); 

     //ONITEMCLICK 
     convertView.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       //Toast.makeText(c,u.getName(), Toast.LENGTH_SHORT).show(); 

       Intent startMenuActivity = new Intent(this, Menu_Activity.class); 
       startActivity(startMenuActivity); 
      } 
     }); 

     return convertView; 
    } 
} 

에 텐트를 만들 때 문제가 나타납니다 "(이, Menu_Activity 구축 .수업);" 여기

Cannot resolve constructor 'Intent(anonymous android.view.View.OnClickListener, java.lang.Class<uk.ac.napier.newsreader.Menu_Activity>)' 
+0

특권을 참조 즉 당신이 당신의 활동 내에서 onItemClickListener 전화를하고 온 클릭 메소드 내에서 원하는 뷰의 ID에 대한 switch 문을 사용하여 넣을 수있는 인터페이스를 가지고 거기에 의도. 관련 항목 : http://stackoverflow.com/questions/18405299/onitemclicklistener-using-arrayadapter-for-listview –

답변

0
Intent startMenuActivity = new Intent(c, Menu_Activity.class); 

c 없다는 오류를 신고하면 컨텍스트 변수입니다.

설명 :이 첫 번째 인수로 활동 상황을 통과 해야하는

.

0

이것은 내 응용 프로그램 중 하나에서 사용한 것입니다.

LocationAdapter adapter = new LocationAdapter(getApplicationContext(), R.layout.row, result); 
       //set the locationList (listview) to use adapter initialised above 
       locationList.setAdapter(adapter); 
       //Set up onClickListner 
       locationList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
         //get the position of the row. So which row was clicked 
         LocationModel locationModel = result.get(position); 
         //initialise intent, this click event takes the user to locationDetails Activity 
         Intent intent = new Intent(ListActivity.this, LocationDetails.class); 
         //passing extra value. in this case passing of locationModel 
         intent.putExtra("locationModel", new Gson().toJson(locationModel)); 
         //start activity 
         startActivity(intent); 
        } 
       }); 
0

어댑터 클래스에서 "this"는 클래스 개체를 returen 않습니다. 이를 위해

//ONITEMCLICK 
     convertView.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Intent startMenuActivity = new Intent(this, Menu_Activity.class); 
       startActivity(startMenuActivity); 
      } 
     }); 

: 목록 객체에

listview.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent startMenuActivity = new Intent(MyActivity.this, Menu_Activity.class); 
      startActivity(startMenuActivity); 
     } 
    }); 
0

변경이 OnItemClickListener 설정

//ONITEMCLICK 
     convertView.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Intent startMenuActivity = new Intent(c, Menu_Activity.class); 
       startActivity(startMenuActivity); 
      } 
     }); 

Diference :

의도 startMenuActivity = 새로운 의도 (, Menu_Activity .수업);

의도 startMenuActivity = new 의도 (c, Menu_Activity.class);

을 기억

가 익명 클래스로 을 "말"할 때, 당신은 그녀 (익명 객체 클래스)가 아니라 "메인 클래스"를 다스 려한다.

은 ListView에 더 Anonymous Classes - Oracle Doc

관련 문제