2016-05-24 51 views
0

我正在與朋友做一個應用程序,我們有點卡住了。我已經成功地設計了一個多行LisView,併爲它做了一個自定義適配器。該應用程序所做的是從其他活動註冊汽車,當點擊提交按鈕時,我們希望從汽車添加3個項目到我們在選項卡式活動中使用的ListView。我已經用Intent和Bundle嘗試了幾件事情來獲取信息,然後將其放入,但它給出了一個空錯誤。從其他活動中將項目添加到多行列表視圖

這是我的項目現在直到:

MainActivity:

import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 

public class MainActivity extends AppCompatActivity { 



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

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(MainActivity.this, CarType.class); 
      MainActivity.this.startActivity(intent); 


     } 
    }); 

    // Get the ViewPager and set it's PagerAdapter so that it can display items 
    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
    viewPager.setAdapter(new SampleFragmentPageAdapter(getSupportFragmentManager(), 
      MainActivity.this)); 

    // Give the TabLayout the ViewPager 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs); 
    tabLayout.setupWithViewPager(viewPager); 

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      Fragment fragment = null; 
      if(tab.getPosition()==0) { 

       PageFragment pageFragment = new PageFragment(); 
       getSupportFragmentManager().beginTransaction().replace(R.id.container, pageFragment).commit(); 
      } 
      if(tab.getPosition()==1){ 
       SecondPageFragment secondPageFragment = new SecondPageFragment(); 
       getSupportFragmentManager().beginTransaction().replace(R.id.container,secondPageFragment).commit(); 

      } 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 
} 

} 

頁面片段:

import android.os.Bundle; 
import android.support.v4.app.ListFragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListView; 

public class PageFragment extends ListFragment { 

String[] cars ; 
String[] modelo ; 
String[] placas ; 


public static final String ARG_PAGE = "ARG_PAGE"; 

private int mPage; 

public static PageFragment newInstance(int page) { 
    Bundle args = new Bundle(); 
    args.putInt(ARG_PAGE, page); 
    PageFragment fragment = new PageFragment(); 
    fragment.setArguments(args); 
    return fragment; 
} 


public PageFragment() { 


} 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


} 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    Bundle intent = getActivity().getIntent().getExtras(); 



     cars = new String[]{intent.getString("marca")}; 
     modelo = new String[]{intent.getString("modelo")}; 
     placas = new String[]{intent.getString("placas")}; 



    View view = inflater.inflate(R.layout.activity_page_fragment, container, false); 
    Adapter adapter = new Adapter(getActivity(), cars, modelo, placas); 
    ListView listView = (ListView) view.findViewById(android.R.id.list); 
    listView.setAdapter(adapter); 

    return view; 
} 
} 

適配器:

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 


public class Adapter extends ArrayAdapter<String> { 

String [] cars ; 
String [] modelo ; 
String [] placas ; 
Context c; 
LayoutInflater inflater; 


public Adapter(Context context, String[] cars, String[] modelo, String[] placas){ 
    super(context, R.layout.single_row, cars); 

    this.c=context; 
    this.cars=cars; 
    this.modelo=modelo; 
    this.placas=placas; 



} 

public class ViewHolder{ 
    TextView cars; 
    TextView model; 
    TextView placas; 


} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if(convertView == null){ 

     inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView=inflater.inflate(R.layout.single_row,null); 

    } 

    final ViewHolder holder = new ViewHolder(); 
    holder.cars=(TextView)convertView.findViewById(R.id.textView2); 
    holder.model=(TextView)convertView.findViewById(R.id.textView3); 
    holder.placas=(TextView)convertView.findViewById(R.id.textView4); 

    holder.cars.setText(cars[position]); 

    holder.model.setText(modelo[position]); 
    holder.placas.setText(placas[position]); 

    return convertView; 
} 
} 

CarType:這是我想我有一個XML文件,我的頁面片段的信息列表視圖

import android.app.AlertDialog; 
import android.content.Intent; 
import android.graphics.drawable.Drawable; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.*; 

import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.toolbox.Volley; 

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

import java.io.File; 

public class CarType extends AppCompatActivity { 

ImageButton androidImageButton; 
ImageView imageView; 
static final int CAM_REQUEST = 1; 



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

    final EditText etMarca = (EditText)findViewById(R.id.etMarca); 
    final EditText etModelo = (EditText)findViewById(R.id.etModelo); 
    final EditText etPlacas = (EditText)findViewById(R.id.etPlacas); 
    final EditText etColor = (EditText)findViewById(R.id.etColor); 
    final CheckBox cbCamioneta = (CheckBox)findViewById(R.id.cbCamioneta); 
    final CheckBox cbCar = (CheckBox)findViewById(R.id.cbCar); 
    final boolean checkStatus = cbCamioneta.isChecked(); 



    Button bSubmit = (Button)findViewById(R.id.bSubmit); 


    assert bSubmit != null; 
    bSubmit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent intent = new Intent(getApplicationContext(), Adapter.class); 
      intent.putExtra("marca", etMarca.getText().toString()); 
      intent.putExtra("modelo", etModelo.getText().toString()); 
      intent.putExtra("placas", etPlacas.getText().toString()); 
      intent.putExtra("color", etColor.getText().toString()); 
      intent.putExtra("camioneta", cbCamioneta.getText().toString()); 
      intent.putExtra("car", cbCar.getText().toString()); 
      intent.putExtra("checkboxstatus", checkStatus); 

      startActivity(intent); 


      final String modelo = etModelo.getText().toString(); 
      final String marca = etMarca.getText().toString(); 
      final String placas = etPlacas.getText().toString(); 
      final String color = etColor.getText().toString(); 

      Response.Listener<String> responseListener = new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        try { 
         JSONObject jsonResponse = new JSONObject(response); 
         boolean success = jsonResponse.getBoolean("success"); 
         if (success) { 
          Intent intent = new Intent(CarType.this, MainActivity.class); 
          CarType.this.startActivity(intent); 
         } else { 
          AlertDialog.Builder builder = new AlertDialog.Builder(CarType.this); 
          builder.setMessage("Register Failed") 
            .setNegativeButton("Retry", null) 
            .create() 
            .show(); 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }; 

      CarRegisterRequest carregisterRequest = new CarRegisterRequest(marca, modelo, placas, color, responseListener); 
      RequestQueue queue = Volley.newRequestQueue(CarType.this); 
      queue.add(carregisterRequest); 

     } 
    }); 

    androidImageButton = (ImageButton) findViewById(R.id.image_button_android); 
    imageView = (ImageView) findViewById(R.id.Final_picture); 
    androidImageButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      File file = getFile(); 
      camera_intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); 
      startActivityForResult(camera_intent, CAM_REQUEST); 
     } 
    }); 
} 



private File getFile(){ 
    File folder = new File ("sdcard/camera_app"); 

    if (!folder.exists()){ 
     folder.mkdir(); 
    } 
    File image_file = new File(folder, "cam_image.jpg"); 
    return image_file; 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    String path = "sdcard/camera_app/cam_image.jpg"; 
    imageView.setImageDrawable(Drawable.createFromPath(path)); 
} 

} 

在此之後,其僅包括一個ListView和我的形式有一個「single_row.xml」,它是多行ListView的格式。

任何幫助將非常感激,我對Android和本網站相當新,所以我很抱歉,如果我沒有直接得到答案。

非常感謝。

+0

你會提供錯誤日誌中還更新相關的行號 – Alok

+0

的代碼行,你可以通過束傳遞對象本身在parcelable ,或者你可以將它保存到一個數據庫中,並在新的活動中從數據庫中讀取它,SugarORM是一個易於實施的數據庫。您也可以使用片段和主動細節模式(android studio擁有它默認情況下)使用片段和這種方式在同一個活動中,您可以交換片段,並使它看起來像兩個不同的活動 –

回答

0

這是很容易活動的Android

如何溝通你需要startActivityForResult(intent, requestCode)MainActivity一旦你開始爲結果的活動,您將需要等待結果在同一個活動(MainActivity),你會得到結果在您的onActivityResult(int requestCode, int resultCode, Intent data)以及該意圖中的所有數據。

public class MainActivity extends AppCompatActivity { 

    private static final int RQ_CAR = 1; 
    .... 


     .... 
     // Open the second activity 
     Intent intent = new Intent(MainActivity.this, CarType.class); 
     startActivityForResult(intent, RQ_CAR); 
     .... 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(requestCode == RQ_CAR && resultCode == Activity.RESULT_OK) { 
      Bundle bundle = data.getExtras(); 
      // Extract data and do whatever you want 
     } 
    } 

} 

但我在哪裏可以指定Bundle的意圖,並將resultCode設置爲OK?

在你的第二個活動(CarType),你需要的是手動

Intent intent = new Intent(); 
Bundle extras = new Bundle(); 
extras.put....(); // put all your data here 
intent.putExtras(extras); 
setResult(Activity.RESULT_OK, intent); 
+0

我試着遠遠地,謝謝! –

+0

我不應該在片段中的代碼的第一部分?或MainActivity可以嗎? –

+0

這取決於。誰將開始並獲得結果? –

相關問題