2017-05-25 62 views
0

我需要滾動視圖和位置,以便知道打開哪個鏈接。 Textviews和列表是不可點擊的,因此我不能調用這個意圖。我讓他們設置爲假,因爲我讀了那些你需要做的事情讓孩子們去工作。我完全卡住了。
package com.example.user.siy;如何在Scroll View中使用SetItemClickListener?

import android.app.Fragment; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ListView; 

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
    import org.jsoup.select.Elements; 

    import java.io.IOException; 
    import java.util.ArrayList; 
    import java.util.List; 


public class EventsController extends Fragment{ 

View myView; 

private ListView lvProduct; 
private EventsListAdapter adapter; 
private List<Events> mProductList; 
ProgressDialog mProgressDialog; 
String linkHref; 

public static String link; 

public ArrayList<String> beerList = new ArrayList<String>(); 
public ArrayList<String> beerList2 = new ArrayList<String>(); 



@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) { 
    myView = inflater.inflate(R.layout.events, container, false); 
    new NewThread().execute(); 
    return myView; 
    } 

    public class NewThread extends AsyncTask<String, Void, String> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     // Create a progressdialog 
     mProgressDialog = new ProgressDialog(getActivity()); 
     // Set progressdialog message 
     mProgressDialog.setMessage("Loading..."); 
     mProgressDialog.setIndeterminate(false); 
     // Show progressdialog 
     mProgressDialog.show(); 
     } 
     @Override 
     protected String doInBackground(String... arg) { 
     mProductList = new ArrayList<>(); 
     mProductList.clear(); 
     Document doc; 
     try { 
      doc = Jsoup.connect("http://www.website.com/").get(); 
      linkHref = new String(""); 
      link = new String(""); 
      Elements beer = doc.select("div[class=av-upcoming-events avia- 
      builder-el-22 el_after_av_hr avia-builder-el-last]"); 
      Elements theH4 = beer.select("h4"); 
      Elements links = beer.select("a"); //Sections 

      for (int j = 0; j < theH4.size(); j++) { 
       beerList.add(theH4.get(j).text()); 
      } 



      for (org.jsoup.nodes.Element link : links) { 
       linkHref = link.attr("href"); 
       beerList2.add(linkHref); 

      } 


      for (int f = 0; f < theH4.size(); f++) { 
       mProductList.add(new Events(beerList.get(f), 
      beerList2.get(f))); 
      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     //Add sample data for list 
     //We can get data from DB, webservice here 
     //Init adapter 
     lvProduct = (ListView) getActivity().findViewById(R.id.listView2); 
     adapter = new EventsListAdapter(getActivity(), mProductList); 
     lvProduct.setAdapter(adapter); 
     mProgressDialog.dismiss(); 


     lvProduct.setOnItemClickListener(new 
      AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, int 
       position, long id) { 
       //Do something 
       //Ex: display msg with product id get from view.getTag 

       link = beerList2.get(position); 

       Intent myIntent = new Intent(getActivity(), Info.class); 
       getActivity().startActivity(myIntent); 
      } 
      }); 


     } 
      } 

//public boolean isOnline() { 
    //ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    //NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    //if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
     //return true; 
    //} 
    //return false; 
    // } 

public String getLink(){ 

    return link; 
    } 
    } 



     <?xml version="1.0" encoding="utf-8"?> 
     <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:focusable="false" 
    android:clickable="true" 
     android:focusableInTouchMode="false" 
     android:layout_height="fill_parent" > 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:id="@+id/list" 
     android:clickable="false" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 




<TextView android:id="@+id/title2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dip" 
    android:text="Mooon Light Stuff" 
    android:textColor="#000000" 
    android:textSize="22sp" 
    android:clickable="false" 
    android:textStyle="bold" 
    /> 




     </LinearLayout> 

     </ScrollView> 




Attempt to fix. 





      example = (TextView) getActivity().findViewById(R.id.title2); 
      example.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       link = beerList2.get(1); 

       Intent myIntent = new Intent(getActivity(), Info.class); 
       getActivity().startActivity(myIntent); 
       } 
       }); 
+0

ScrollView沒有項目,它有一些視圖,你添加到它。您可以直接將偵聽器設置爲視圖。 –

+0

是否這樣?示例=(TextView)getActivity()。findViewById(R.id.title2); example.setOnClickListener(新View.OnClickListener(){ @Override 公共無效的onClick(視圖v){ 鏈路= beerList2.get(1); 意圖myIntent =新意圖(getActivity(),Info.class) ; getActivity()。startActivity(myIntent); } }); 沒有我的應用程序mon't解析和崩潰。現在是空的。 – user6940221

+0

這是另一個問題。你絕對做一些很奇怪的事情。 –

回答

1

這裏是工作示例如何實現OnItemClickListener。 確保您的類實現了View.OnClickListener & AdapterView.OnItemSelectedListener,如代碼所示。 BTW OnItemClickListener將使用滾動視圖或您使用的任何其他佈局。此代碼在我的案例中使用滾動視圖正常工作。

package com.smart.projects.activity; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.ActionBarDrawerToggle; 
import android.support.v4.widget.DrawerLayout; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.FrameLayout; 
import android.widget.ListView; 
import android.widget.Toast; 

import com.smartmob.projects.adapters.NavigationDrawerListAdapter; 
import com.smartmob.projects.models.Items; 

import java.util.ArrayList; 

/** 
    *   <p/> 
*   This activity will add Navigation Drawer for our application and all the code related to navigation drawer. 
*   We are going to extend all our other activites from this BaseActivity so that every activity will have Navigation Drawer in it. 
*   This activity layout contain one frame layout in which we will add our child activity layout. 
*/ 
public class BaseActivity extends Activity implements View.OnClickListener, AdapterView.OnItemSelectedListener { 

    /** 
    * Static variable for selected item position. Which can be used in child activity to know which item is selected from the list. 
    */ 
    protected static int position; 
    /** 
    * This flag is used just to check that launcher activity is called first time so that we can open appropriate Activity on launch and make list item position selected accordingly. 
    */ 
    private static boolean isLaunch = true; 
    /** 
    * Frame layout: Which is going to be used as parent layout for child activity layout. 
    * This layout is protected so that child activity can access this 
    */ 
    protected FrameLayout frameLayout; 
    /** 
    * ListView to add navigation drawer item in it. 
    * We have made it protected to access it in child class. We will just use it in child class to make item selected according to activity opened. 
    */ 

    protected ListView mDrawerList; 
    /** 
    * List item array for navigation drawer items. 
    */ 
    protected String[] listArray = {"CML Monitor Features","About CML", "View CBC Report", "Add CBC Report", "View CBC Trend"}; 
    protected ArrayList<Items> _items; 
    boolean dataExists = false; 
    /** 
    * Base layout node of this Activity 
    */ 
    private DrawerLayout mDrawerLayout; 
    /** 
    * Drawer listner class for drawer open, close etc. 
    */ 
    private ActionBarDrawerToggle actionBarDrawerToggle; 

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

     frameLayout = (FrameLayout) findViewById(R.id.content_frame); 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) findViewById(R.id.left_drawer); 

     // set a custom shadow that overlays the main content when the drawer opens 
     //mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 

     _items = new ArrayList<Items>(); 
     _items.add(new Items("About CML", "In Menu click on 'About CML' to learn about CML (Chronic Myeloid Leukemia)", R.drawable.item_1)); 
     _items.add(new Items("View Report", "In Menu click 'View Report' to view CBC Reports stored in the device", R.drawable.item_2)); 
     _items.add(new Items("Add Record", "In Menu click 'Add Record' to add a new CBC Record", R.drawable.item_5)); 
     _items.add(new Items("View CBC Trend", "In Menu click 'CBC trend' to view trends of each CBC parameter in CBC Report", R.drawable.item_4)); 
     // _items.add(new Items("Tabular Report", "View tabular CBC Report", R.drawable.item_5)); 
     //Adding header on list view 
     View header = getLayoutInflater().inflate(R.layout.list_view_header_layout, null); 
     mDrawerList.addHeaderView(header); 

     // set up the drawer's list view with items and click listener 
     mDrawerList.setAdapter(new NavigationDrawerListAdapter(this, _items)); 
     mDrawerList.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 

       openActivity(position); 
       Log.e("Logger:BaseActivity", "onItemClick-Enter"); 
      } 
     }); 

     // enable ActionBar app icon to behave as action to toggle nav drawer 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
     getActionBar().setHomeButtonEnabled(true); 


     // ActionBarDrawerToggle ties together the the proper interactions between the sliding drawer and the action bar app icon 
     actionBarDrawerToggle = new ActionBarDrawerToggle(
       this,      /* host Activity */ 
       mDrawerLayout,    /* DrawerLayout object */ 
       R.drawable.apple_fruit,  /* nav drawer image to replace 'Up' caret */ 
       R.string.open_drawer,  /* "open drawer" description for accessibility */ 
       R.string.close_drawer)  /* "close drawer" description for accessibility */ { 
      @Override 
      public void onDrawerClosed(View drawerView) { 
       getActionBar().setTitle(listArray[position]); 
       invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
       super.onDrawerClosed(drawerView); 
      } 

      @Override 
      public void onDrawerOpened(View drawerView) { 
       getActionBar().setTitle(getString(R.string.app_name)); 
       invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
       super.onDrawerOpened(drawerView); 
      } 

      @Override 
      public void onDrawerSlide(View drawerView, float slideOffset) { 
       super.onDrawerSlide(drawerView, slideOffset); 
      } 

      @Override 
      public void onDrawerStateChanged(int newState) { 
       super.onDrawerStateChanged(newState); 
      } 
     }; 
     mDrawerLayout.setDrawerListener(actionBarDrawerToggle); 

    } 

    /*End of OnCreate*/ 

    /*Start OnClick*/ 
    /* Comment : Have to implement with the OnClickListner onClick is called when a view has been clicked.*/ 
    public void onClick(View v) { // Parameter v stands for the view that was clicked. 

     Log.e("Logger:BaseActivity", "onClick:Enter"); 
     final Context context = this; 
    } 
    /*End of onClick*/ 

    /** 
    * @param position Launching activity when any list item is clicked. 
    */ 
    protected void openActivity(int position) { 
     Log.e("Logger:BaseActivity", "openActivity-Enter"); 
     /** 
     * We can set title & itemChecked here but as this BaseActivity is parent for other activity, 
     * So whenever any activity is going to launch this BaseActivity is also going to be called and 
     * it will reset this value because of initialization in onCreate method. 
     * So that we are setting this in child activity. 
     */ 
//  mDrawerList.setItemChecked(position, true); 
//  setTitle(listArray[position]); 
     mDrawerLayout.closeDrawer(mDrawerList); 
     BaseActivity.position = position; //Setting currently selected position in this field so that it will be available in our child activities. 

     switch (position) { 
      case 0: 
       startActivity(new Intent(this, com.smartmob.projects.activity.HomeActivity.class)); 
       break; 
      case 1: 
       startActivity(new Intent(this, AboutActivity.class)); 
       break; 
      case 2: 
       startActivity(new Intent(this, com.smartmob.projects.activity.MainActivity.class)); 
       break; 
      case 3: 
       startActivity(new Intent(this, com.smartmob.projects.activity.AddActivity.class)); 
       break; 
      case 4: 
       startActivity(new Intent(this, TrendActivity.class)); 
       break; 
      default: 
       break; 
     } 
    } 

    //@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     Log.e("Logger:BaseActivity", "onCreateOptionsMenu-Enter"); 
     getMenuInflater().inflate(R.menu.main, menu); 
     return super.onCreateOptionsMenu(menu); 

    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     Log.e("Logger:BaseActivity", "onOptionsItemSelected-Enter"); 
     // The action bar home/up action should open or close the drawer. 
     // ActionBarDrawerToggle will take care of this. 

     if (actionBarDrawerToggle.onOptionsItemSelected(item)) { 
      Log.e("Logger:BaseActivity", "onOptionsItemSelected-Enter"+item); 
      return true; 
     } 

     switch (item.getItemId()) { 
      case R.id.exit: 
       Log.e("Logger:BaseActivity", "onOptionsItemSelected-getItemId"+item.getItemId()); 
       Toast.makeText(this, "Exit Application", Toast.LENGTH_LONG).show(); 
       moveTaskToBack(true); 
       android.os.Process.killProcess(android.os.Process.myPid()); 
       System.exit(1); 
       return true; 
      /*case R.id.action_settings: 
       Log.e("Logger:BaseActivity", "onOptionsItemSelected-getItemId"+item.getItemId()); 
       Toast.makeText(this, "Settings clicked", Toast.LENGTH_SHORT).show(); 
       return true;*/ 

      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

    /* Called whenever we call invalidateOptionsMenu() */ 
    //@Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     Log.e("Logger:BaseActivity", "onPrepareOptionsMenu-Enter"); 
     // If the nav drawer is open, hide action items related to the content view 
     boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); 
     //////// menu.findItem(R.id.action_settings).setVisible(!drawerOpen); 
     menu.findItem(R.id.exit).setVisible(!drawerOpen); 
     return super.onPrepareOptionsMenu(menu); 
    } 

    /* We can override onBackPressed method to toggle navigation drawer*/ 
    @Override 
    public void onBackPressed() { 
     Log.e("Logger:BaseActivity", "onBackPressed-Enter"); 
     if (mDrawerLayout.isDrawerOpen(mDrawerList)) { 
      mDrawerLayout.closeDrawer(mDrawerList); 
     } else { 
      mDrawerLayout.openDrawer(mDrawerList); 
     } 
    } 

    @Override 
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
     Log.e("Logger:BaseActivity", "onItemSelected-Enter"); 

    } 

    @Override 
    public void onNothingSelected(AdapterView<?> adapterView) { 

    } 

} 
+0

原來我並不需要爲我的應用程序可以滾動。我不知道如何,但向下滾動的能力是沒有我在列表視圖中實現它。我仍會將你的問題標記爲已解決,它可能會幫助某人。 – user6940221

+0

乾杯!我正在迴應你的要求。事實上開發人員明確指出,滾動視圖不應該與listview一起使用。bcos listview支持垂直滾動。如果你有特定的問題,請發佈他們,我會盡力幫助https://developer.android.com/reference/android/widget/ScrollView.html – Ajay

相關問題